Bloc 模式是不是适合在 Flutter 应用中管理导航?
Posted
技术标签:
【中文标题】Bloc 模式是不是适合在 Flutter 应用中管理导航?【英文标题】:Is Bloc pattern appropriate to manage navigation in a Flutter app?Bloc 模式是否适合在 Flutter 应用中管理导航? 【发布时间】:2020-08-13 16:52:57 【问题描述】:我在问 bloc_flutter(flutter 的 Bloc 模式实现)是否是管理应用“导航”的正确解决方案。
我使用 bloc_flutter 来管理 firebase 登录 https://github.com/felangel/bloc/tree/master/examples/flutter_firebase_login。
用户成功登录后,他会进入带有菜单的“欢迎屏幕”。我尝试使用新的 bloc 模式管理此菜单的屏幕导航,但这对我来说似乎是一个压倒性的解决方案。 此外,使用带 bloc 模式的导航不会让您使用 android 的“后退按钮”。
那么,在您看来,使用路线导航并让 bloc 管理每个屏幕的逻辑会更好吗?
【问题讨论】:
【参考方案1】:我将GlobalKey<NavigatorState>
传递给 bloc 并且可以从那里执行导航:
@override
Stream<MyScreenState> mapEventToState(
MyScreenEvent event,
) async*
if (event is SomeEvent)
_navigatorKey.currentState.push(...);
请注意,此密钥需要在 MaterialApp
实例化上使用才能正常工作:
MaterialApp(
navigatorKey: _navigatorKey,
...
);
【讨论】:
感谢您的回复。但问题是:使用 BloC 进行导航是否值得?【参考方案2】:不,不是。如果您希望您的应用程序具有良好的架构,则不应使用 bloc 来处理导航,因为导航与应用程序的业务逻辑无关,它是 UI 的一部分。
【讨论】:
以上是关于Bloc 模式是不是适合在 Flutter 应用中管理导航?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter BloC 模式:基于另一个 BloC 的流更新 BloC 流