flutter - getter 'bloc' 在 null 上调用

标签 flutter dart bloc

我尝试使用 bloc 创建 ListView 。

这是我的集体课

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();
  }
}

在小部件类中,我尝试调用 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 小部件。

关于flutter - getter 'bloc' 在 null 上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56865638/

相关文章:

ios - 在 Flutter 中打开原生 UIViewController

flutter - 不可为空的实例字段 'Welcome' 必须初始化 Flutter

flutter - 如何在Flutter中为TextField使用BeveledRectangleBorder

flutter - 错误 : NoSuchMethodError, 在 null 上调用了 getter 'index'

Flutter BLoC - Bloc vs Cubit 事件驱动状态管理优势

flutter - 为什么这个 Flutter Cubit 在省略关键字 'required' 时会抛出错误?

将项目滚动出屏幕时,Flutter ListView 小部件会重置图标

flutter - 状态错误 : field does not exist within the DocumentSnapshotPlatform Flutter Firestore

android - 无法在Flutter中设置SetState()

flutter - 为什么我们不能在具有 bloc 属性的 Consumer 内部使用 BlocProvider.of(blocContext) ?什么是解决方案?