簡體   English   中英

如何在 flutter 上使用 go_router 將 bloc 傳遞到另一個屏幕

[英]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

默認情況下,BlocProvider 是lazy加載的。

當與 Create 一起使用時,它會自動處理關閉實例。 默認情況下,只有在訪問實例時才會調用 Create。 要覆蓋此行為,請將惰性設置為 false。

因此,與其在路由之間傳遞bloc ,最佳做法是:

使用BlocProvidermain.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM