【问题标题】:Modal Bottom Sheet and Bloc模态底板和块
【发布时间】:2020-10-19 14:14:47
【问题描述】:

当我运行类似于以下代码的代码时出现以下错误:BlocProvider.of() 调用了一个不包含 Bloc 的上下文。

复制

BlocProvider(
          create: (context) => getIt<TheBloc>()
          child: BlocBuilder<TheBloc, TheState>(
          build: (context, state) =>
          MaterialButton(
            onPressed: () => _showModal(context),
            child: const Text('SHOW BLOC MODAL'),
),

...

void _showModal(BuildContext context) {
  showModalBottomSheet<void>(
    context: context,
    builder: (_) {
          return MaterialButton(
               onPressed() {
                       context.bloc<TheBloc>().add(
                         TheEvent.someEvent(),
                       );
               }
              child: Text('Press button to add event to bloc')
          );
    },
  );
}

【问题讨论】:

  • 我审查了你的 sn-ps - 这个例子应该可以工作。我猜你真实代码中的某个地方的原因
  • @SergeySalnikov 问题是这段代码,我通过按照 bloc api 参考将模式的构建器包装在 BlocProvider.value 中来修复它。我已经添加了问题的答案。谢谢

标签: flutter bloc flutter-bloc


【解决方案1】:

您需要使用 BlocProvider.value 包装 showModalBottomSheet 的构建器,如下所示: 因为上下文是新的。

return BlocProvider.value(
     value: BlocProvider.of<TheBloc>(context),
     child: MaterialButton( ...
     ...

【讨论】:

  • 如果你将 bloc 传递给_showModal(TheBloc bloc) 并在上下文中跳过不必要的查找会更清楚 =)
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多