首页 > 解决方案 > 在flutter_bloc中提供后无法立即消耗一肘

问题描述

我正在使用flutter_bloc和cubits作为我的flutter应用程序的状态,我是整个bloc架构的新手,但我了解基本原理,我的问题是,我不想用Provider包装我的整个应用程序的根,因为状态只会在树中更深的小部件中使用一次,但可以从它的进一步子级中修改,

我正在尝试使用 BlocProvider 将 cubit 传递给上下文,并立即使用它,而不是将其分离到另一个无状态小部件中,

BlocProvider(
            create: (BuildContext context) => SearchResultsCubit(),
            child: ListView.builder(
                itemCount:
                    BlocProvider.of<SearchResultsCubit>(context).state.length,

在 itemCount 中,我试图访问 BlocProvider 正上方提供的状态,但它似乎不起作用。

该应用程序将抛出一个错误,说它无法找到所述提供者,如果有人能指出我哪里出错或我可以使用什么其他方法来实现这个结果,我将不胜感激

谢谢你。

标签: flutterblocflutter-bloc

解决方案


朋友。你可以试试这个结构。当然,你应该实现你的 Cubit。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: BlocProvider(
      create: (context) => SearchResultsCubit(),
      child: SecondPage(),
    ));
  }
}

class SecondPage extends StatelessWidget {
  const SecondPage({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<SearchResultsCubit, SearchResultsState>(
      builder: (context, state) {
        return Container(
          width: double.infinity,
          height: 100.0,
          child: ListView.builder(
            scrollDirection: Axis.horizontal,
            itemBuilder: (context, index) => Container(
                width: 50.0,
                height: 100.0,
                child: Center(child: Text(state[index].text))),
            itemCount: state.length,
          ),
        );
      },
    );
  }
}

推荐阅读