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用于其他屏幕?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Bloc 教程 - 如何显示用户名,即来自其他页面的值
Flutter Bloc 如何从 Widget 本身更新 BlocBuilder 中的 Widget?