Flutter,如何将exist Bloc用于其他屏幕?

Posted

技术标签:

【中文标题】Flutter,如何将exist Bloc用于其他屏幕?【英文标题】:Flutter, how to use exist Bloc for other screens? 【发布时间】:2021-08-07 15:37:57 【问题描述】:

假设 A 类是任意根的,其子类是 B、C 和 D 类。

(并非所有类都在同一层次结构中)

当我在 D 类中使用 BlocConsumer 或 BlocBuilder 时,出现错误。

我只是想重用A类和B类中使用的Bloc状态。

有什么解决办法吗?谢谢

--更新

我在说这个https://github.com/felangel/bloc/issues/74

除了将其作为导航器参数一个一个传递给类之外,还有其他方法吗?

【问题讨论】:

至少向我们展示我们可以看到您的BlocProvider范围的代码... @SimonSot 对不起,我当然可以复制和粘贴,但我认为这个解释更清楚。我只是在谈论完整的基本结构。我想说 A 类使用 BlocProvider,B 允许 Bloc Consumer,但 C 和 D 不能。我只是想解释一下 【参考方案1】:

注意:我假设您使用的是 flutter_bloc 库,但即使您不是,概念也是一样的。

您要访问的 BLoC 必须在您要访问此 BLoC 的所有屏幕/页面之上提供。解决问题的最简单方法是将您的根小部件(可能是 MaterialApp)包装为 BlocProvider

runApp(
  BlocProvider<YourBloc>(
    create: (_) => YourBloc(), // create your BLoC here
    child: MaterialApp(...),
  ),
);

有关更多信息,我建议观看此视频:https://www.youtube.com/watch?v=laqnY0NjU3M

【讨论】:

嗨,如果父级不在 main 方法中怎么办?我有一个 TabBarClass,它提供了 BlocProvider,然后每个标签栏屏幕视图都可以使用 BlocConsumer 或 BlocBuilder 但是,标签栏屏幕视图的子级不能使用 BlocBuilder 或 BlocConsumer 不确定这是否有问题 - 如果您在例如上面提供 BLoC MaterialApp,不管你把它们放在哪里,它都应该可以在所有内部页面中访问。

以上是关于Flutter,如何将exist Bloc用于其他屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

颤振:如何使用“等待”等待其他 BLoC 事件完成

Flutter Bloc 教程 - 如何显示用户名,即来自其他页面的值

Flutter Bloc 如何从 Widget 本身更新 BlocBuilder 中的 Widget?

Flutter - 了解 Provider、Bloc 的生命周期以及何时处理流 [重复]

Flutter 从其他 Bloc 监听 Bloc 状态

Flutter BLoC - 如何将参数传递给事件?