Flutter:BLoC 包 - bloc 提供者

Posted

技术标签:

【中文标题】Flutter:BLoC 包 - bloc 提供者【英文标题】:Flutter: BLoC package - bloc provider 【发布时间】:2019-06-16 01:22:11 【问题描述】:

我正在使用这个包:https://pub.dartlang.org/packages/bloc。 我有 2 个视图:在第一个视图中,我使用“bloc1”显示元素列表,并且通过 FloatingActionButton,我可以导航到使用“bloc2”的第二个屏幕。在第二个屏幕中,我想通过“bloc1”的 Bloc 提供程序将一个元素添加到我之前的列表中,这样我就可以执行类似bloc1.dispatch(addElement) 的操作。 我的问题是:如何声明 bloc1 的 bloc 提供者? 例如: Bloc bloc = BlocProvider.of<Bloc1>(context)

【问题讨论】:

【参考方案1】:

您需要使用 BlocProvider 包装您的 MaterialApp,例如:

BlocProvider(bloc: bloc1, child: MaterialApp(...));

然后您可以使用以下命令从任何地方访问 bloc1: BlocProvider.of<Bloc1>(context)

希望有帮助!

【讨论】:

不会包装整个页面小部件,更不用说整个MaterialApp,在BlocProvider 中会导致性能问题? 不应该没有任何性能问题。无论 BlocProvider 在树中的高度如何,都只会重建使用 BlocBuilder 包装的 UI 部分。要记住的主要事情是,您应该始终将 bloc 范围限定为仅需要它的小部件树的部分。【参考方案2】:

Bloc 现在支持 MultiBlocProvider,它可以帮助您在 main 中设置所有 bloc 并在代码中的任何位置使用它。

在你的 main.dart 中

return MultiBlocProvider(
  providers: [
    BlocProvider<BlocA>(create: (BuildContext context) => BlocA(),),
    BlocProvider<BlocB>(create: (BuildContext context) => BlocB(),),
  ],
  child: MaterialApp(....),
)

【讨论】:

以上是关于Flutter:BLoC 包 - bloc 提供者的主要内容,如果未能解决你的问题,请参考以下文章

不在yaml文件flutter中安装包bloc或flutter bloc

使用 Provider 向整个 Flutter 模块全局提供 BLoC

初始化 BLoC 时应该如何处理异步调用?

需要帮助了解 flutter_bloc 如何注入 bloc

Flutter Bloc:在创建的上下文中没有我的 bloc 的祖先,而我很好地为其提供了 BlocProvider.value

Flutter Bloc 框架 实现 HTTP + JSON 通讯