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模式通过分页加载数据列表?

Dart/Flutter 中 BLoC 模式的最佳实践

Flutter BloC 模式:基于另一个 BloC 的流更新 BloC 流

如何在我的项目中应用flutter_bloc?

在 BLoC 模式中传递参数 Flutter(Stream Controller)

Flutter bloc 模式多次重复调用函数