如何在小部件附近提供BLoC,而不使它们在Flutter中具有命名路由?

vtwuwzda  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(170)

我正在Flutter中使用BLoC模式(flutter_bloc),我遇到了一个设计挑战。我理解,建议尽可能靠近使用BLoC的位置提供BLoC,以避免不必要的全局状态。当把BlocBuilderwidgets放在widget树的下面时,这是有意义的,但是我正在努力解决BlocProvider的位置问题。
在两个或多个页面之间共享BLoC的情况下,我发现很难在不使其接近全局的情况下定位BlocProvider。例如,在我目前的应用程序结构中,我使用命名路由。这导致了一种结构,其中所有页面仅共享一个共同的祖先页面。如果我在那里提供BlocProvider,在main.dart中,它基本上变成了全局。另一方面,如果我对两个不同的页面使用相同的BLoC,我不确定将BlocProvider放在哪里。
在Flutter中使用命名路由时,是否有推荐的方法为多个页面提供BLoC,而无需求助于全局设置?

nc1teljy

nc1teljy1#

我使用下面的模板基本上路由。我可以轻松地管理块供应商的每一页的应用程序。
app_route.dart:

abstract class AppRoute {
  static final MainBloc mainBloc = MainBloc();
  static Route onRoute(RouteSettings settings) {
    switch(settings.name) {
      case '/':
        return MaterialPageRoute(
          settings: settings,
          builder: () {
            return MultiBlocProvider(
              providers: [
                BlocProvider.value(value: mainBloc),
                ...
              ],
              child: PageHome(),
            );
          },
        );
      case 'routeName':
        return ...;
      default:
        throw 'undefined route';
    }
  }
}

main.dart:

@override
Widget build(BuildContext context) {
  return MaterialApp(
    ...,
    onGenerateRoute: AppRoute.onRoute,
  );
}

导航:

Navigator.pushNamed(context, 'routeName');

相关问题