【问题标题】:BlocProvider.of() called with a context that does not contain a Bloc of type使用不包含 Bloc 类型的上下文调用 BlocProvider.of()
【发布时间】:2020-10-25 02:31:45
【问题描述】:
@override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
    providers: [
         BlocProvider<TripDetailBloc>(create: (BuildContext context) => TripDetailBloc()),
         BlocProvider<PopUpBloc>(create: (BuildContext context) => PopUpBloc()),
               ],
    child: Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          BlocProvider.of<TripDetailBloc>(context).add(AddTripDetailPannelEvent());
        },
      ),
      appBar: appbar(),
      body: pannel(),
    )
    );
  }

在处理手势时抛出以下断言:

  • 使用不包含 Bloc 类型的上下文调用 BlocProvider.of() TripDetailBloc。
  • 从传递给的上下文中找不到祖先 BlocProvider.of&lt;TripDetailBloc&gt;().
  • 如果您使用的上下文来自 BlocProvider。
  • 他使用的上下文是:TripDetailPage(dependencies: [MediaQuery], 状态:_TripDetailPageState#d4ab3)

【问题讨论】:

    标签: flutter bloc flutter-bloc


    【解决方案1】:

    将您的代码更改为:

    Widget build(BuildContext context) {
      
      return MultiBlocProvider(
          providers: [
            BlocProvider<TripDetailBloc>(create: (BuildContext context) => TripDetailBloc()),
            BlocProvider<PopUpBloc>(create: (BuildContext context) => PopUpBloc()),
          ],
          child: Builder(
            builder: (context) {
              return Scaffold(
                floatingActionButton: FloatingActionButton(
                  child: Icon(Icons.add),
                  onPressed: () {
                    BlocProvider.of<TripDetailBloc>(context).add(AddTripDetailPannelEvent());
                  },
                ),
                appBar: appbar(),
                body: pannel(),
              );
            }
          )
      );
    }
    

    如果您仔细观察,我已将您的 Scaffold 敲击成一个小部件构建器。

    【讨论】:

    • 谢谢伙计,它对我有用。不过很奇怪,如果您想直接从子小部件访问而不在中间创建任何构建方法,我猜提供者无法访问上下文。
    【解决方案2】:

    将您的脚手架包装在构建器小部件中并使用该上下文。 .of(context) 使用的上下文与方法 build(BuildContext context) 相同,这就是它找不到它的原因

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 2020-12-26
      • 2020-10-16
      • 2020-05-20
      • 2020-08-21
      • 2020-11-15
      • 2021-06-10
      • 2020-01-25
      • 2019-09-29
      相关资源
      最近更新 更多