首先,我确实知道 BLoC 应该如何工作,它背后的想法以及我知道构造函数BlocProvider()和BlocProvider.value()构造函数之间的区别。
为简单起见,我的应用程序有 3 个页面,其中包含一个像这样的小部件树:
App()=> LoginPage()=> HomePage()=>UserTokensPage()
我希望我LoginPage()可以访问,UserBloc因为我需要登录用户等。为此,我将LoginPage()构建器包装在App()小部件中,如下所示:
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
home: BlocProvider<UserBloc>(
create: (context) => UserBloc(UserRepository()),
child: LoginPage(),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
这显然工作得很好。然后,如果用户成功登录,他将被导航到HomePage。现在,我需要访问我的两个不同的块,HomePage所以我用来进一步MultiBlocProvider传递现有的UserBloc并创建一个名为DataBloc. 我这样做:
@override
Widget build(BuildContext context) {
return BlocListener<UserBloc, UserState>(
listener: …Run Code Online (Sandbox Code Playgroud)