我需要UserBloc
可以在我的App
周围全局访问,因为似乎无法在不直接依赖于主窗口小部件树的路由中访问BlocProvider
。
我的应用程序的WidgetTree结构(相关部分)现在是:
App
├── HomePage
│ └── LessonPage
└── ProfilePage
可以从LessonPage
导航到ProfilePage
,但可以中断child-parent
的关系,您可以将其称为BlocProvider.of
。 / p>
所以我想知道如何正确处理此问题。
我现在正在使用的解决方案如下,但这导致了我的问题,因为从未调用过close
的{{1}},因为从未真正处置过UserBloc
,而留下了{ {1}}不应该打开。
App
我在这里看到的另一种可能的解决方案是在路由处理程序中进行处理,例如:
Stream
但这将创建runApp(MultiBlocProvider(
providers: [
BlocProvider<AuthBloc>(
create: (context) =>
AuthBloc(authRepository: authRepository)..add(AppStarted()),
),
//.. other BlocProvider not relevant to this question ..
],
child: BlocProvider<UserBloc>(
create: (BuildContext context) => UserBloc(
userRepository: UserRepository(),
authBloc: BlocProvider.of<AuthBloc>(context),
),
child: App(
authRepository: authRepository,
),
)));
});
的多个实例,这些实例必须在实例化时调用尽可能多的时间,这些实例基本上执行的是最好的无用操作。
我真的不喜欢这两种解决方案,这就是为什么我寻求帮助。
*注意:为了处理路由,我使用的是https://pub.dev/packages/fluro,因此将使用handleFunc方法,它只会在任何已注册路由的 //... some more code...
@override
HandlerFunc get handlerFunc => (BuildContext context, Map<String, List<String>> params) {
return BlocProvider<UserBloc>(
create: (BuildContext context) => UserBloc(
userRepository: UserRepository(),
authBloc: BlocProvider.of<AuthBloc>(context),
),child: ProfilePage(email: params[email][0])
);
};
}
上调用。
建议采用哪种方法? 我在这里看不到任何其他解决方案吗?
提前感谢您的帮助!