Abd*_*ssa 9 dart flutter bloc flutter-bloc flutter-go-router
在 Flutter 上,我想将本地传递bloc到另一个屏幕。这就是我在使用默认导航器时将块传递到新路线的方式。
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) => BlocProvider.value(
value: localBloc,
child: MyPage(),
),
));
Run Code Online (Sandbox Code Playgroud)
但现在,我正在使用该go_router包进行导航。我怎样才能将本地提供bloc给我想要使用的屏幕BlocProvider.value()。
小智 7
您需要将块传递给routeusing BlocProvider.value。
context.goNamed('/', extra: HomeBloc());
GoRoute(
path: '/',
builder: (context, state) {
return BlocProvider.value(
value: state.extra! as HomeBloc,
child: HomeScreen(),
);
}
),
Run Code Online (Sandbox Code Playgroud)
然后在里面HomeScreen就可以得到bloc使用了。
final bloc = context.read<HomeBloc>();
Run Code Online (Sandbox Code Playgroud)
kri*_*yaa -2
lazy。与 Create 一起使用时,它会自动处理关闭实例。默认情况下,仅在访问实例时调用 Create。要覆盖此行为,请将惰性设置为 false。
因此bloc,最好的做法是:
提供使用BlocProvider中的所有main.dartMultiBlocProvider
并在之前添加它,App()以便所有孩子都可以访问它。
runApp(
MultiBlocProvider(
providers: [
BlocProvider<BlocA>(
create: (context) => BlocA(),
),
BlocProvider<BlocB>(
lazy: false // if you want the bloc to be loaded here.
create: (context) => BlocB(),
),
],
child: App()
)
);
Run Code Online (Sandbox Code Playgroud)
BlocProvider.of<BlocA>(context).add([BlocAEvent]);并在您想要的屏幕中使用它
| 归档时间: |
|
| 查看次数: |
3816 次 |
| 最近记录: |