【问题标题】:The getter 'bloc' called on nullgetter 'bloc' 调用 null
【发布时间】:2019-11-13 21:06:02
【问题描述】:

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

这是我的班级

MainPageList 模型如下所示

class MainPageList { 列表项;列出图标;
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),
                                  ),

【问题讨论】:

  • 您可以使用快照长度构造函数设置计数,如下所示: itemCount: snapshot.data.documents.length,
  • 好的 vbro。那么块空错误呢?如果你知道请帮助我

标签: flutter dart bloc


【解决方案1】:

您没有提供足够的代码来了解构建方法的上下文,但您似乎正在使用 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 小部件。

【讨论】:

猜你喜欢
  • 2019-09-23
  • 2019-09-12
  • 1970-01-01
  • 2021-12-21
  • 2020-01-10
  • 2020-10-24
  • 2021-04-13
  • 2021-10-22
  • 2020-05-20
相关资源
最近更新 更多