![](/img/trans.png)
[英]Flutter: go_router how to pass multiple parameters to other screen?
[英]How to pass a bloc to another screen using go_router on flutter
在 Flutter 上,我想將本bloc
傳遞到另一個屏幕。 這就是我在使用默認導航器時將 bloc 傳遞給新路由的方式。
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) => BlocProvider.value(
value: localBloc,
child: MyPage(),
),
));
但是現在,我正在使用go_router
包進行導航。 我如何使用BlocProvider.value()
向我想要的屏幕提供本地bloc
。
lazy
加載的。當與 Create 一起使用時,它會自動處理關閉實例。 默認情況下,只有在訪問實例時才會調用 Create。 要覆蓋此行為,請將惰性設置為 false。
因此,與其在路由之間傳遞bloc
,最佳做法是:
使用BlocProvider
在main.dart
中提供所有MultiBlocProvider
並在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()
)
);
並使用BlocProvider.of<BlocA>(context).add([BlocAEvent]);
訪問它在你想要的屏幕上
您需要使用BlocProvider.value
將 bloc 傳遞給路由
context.goNamed('/', extra: HomeBloc());
GoRoute(
path: '/',
builder: (context, state) {
return BlocProvider.value(
value: state.extra! as HomeBloc,
child: HomeScreen(),
);
}
),
然后在HomeScreen
中,您可以使用
final bloc = context.read<HomeBloc>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.