getter 'bloc' 调用了 null

The getter 'bloc' called on null

我尝试使用 bloc 创建列表视图。

这是我的集团class

MainPageList 模型如下所示

class MainPageList { List items; List icons;
MainPageList(this.items, this.icons); }

class MainPageBloc extends BlocBase {
  MainPageList _mainPageList;
  StreamController<MainPageList> _mainPageController =
      StreamController<MainPageList>.broadcast();
  StreamSink<MainPageList> get _inMainPage => _mainPageController.sink;
  Stream<MainPageList> get outMainPage => _mainPageController.stream;

  MainPageBloc(context) {
    init(context);
  }

  void init(BuildContext context) async {
    _mainPageList.items = [
      AppTranslations.of(context).text("submit_request"),
      AppTranslations.of(context).text("signout")
    ];
    _mainPageList.icons = [
      "lib/assets/images/submit_req.svg",
      "lib/assets/images/sign_out.svg"
    ];
    _inMainPage.add(_mainPageList);
  }

  @override
  void dispose() {
    _mainPageController.close();
  }
}

在小部件 class 中,我尝试调用 bloc。

@override
  Widget build(BuildContext context) {
    final MainPageBloc mainBloc = BlocProvider.of<MainPageBloc>(context);
    return WillPopScope(
      onWillPop: () async => false,
      child: Scaffold(
          body: StreamBuilder<MainPageList>(

分配流,

              stream: mainBloc.outMainPage,
              builder: (context, snapshot) {
                Container(
                  child: Scaffold(
                    body: Container(
                      child: ListView.builder(
                        scrollDirection: Axis.vertical,
                        shrinkWrap: true,
                        itemCount: snapshot.data.items.length,
                        itemBuilder: (BuildContext context, int index) {
                          return Card(
                            child: Container(
                                child: ListTile(
                                  contentPadding: EdgeInsets.symmetric(
                                      horizontal: 5.0, vertical: 0.0),

分配给图标

                                  leading: Container(
                                    child: SvgPicture.asset(
                                      snapshot.data.icons[index],
                                      width: 40.0,
                                      color: const Color(0xFFE27023),
                                    ),
                                  ),

分配给项目

                                  title: Text(
                                    snapshot.data.items[index],
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold),
                                  ),

您没有提供足够的代码来了解构建方法的上下文,但您似乎正在使用 BlocProvider。您应该知道,为了在您的小部件的上下文中使用 bloc,您必须这样调用它:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
        home: BlocProvider<MyBloc>(
              bloc: MyBloc(),
              child: MyHome(),
            ),
    );
  }
}

class MyHome extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    myBloc = BlocProvider.of<MyBloc>(context);
    return Container();
  }
}

如您所见,我的应用程序主页不是直接的 MyHome,而是一个 BlocProvider 小部件。