如何使用颤振上的go_router将一个块传递到另一个屏幕



在 Flutter 上,我想将本地bloc传递到另一个屏幕。 这就是我在使用默认导航器时将集团传递到新路线的方式。

Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) =>  BlocProvider.value(
value: localBloc,
child: MyPage(),
),
));

但是现在,我正在使用go_router包进行导航。如何使用BlocProvider.value()向我想要的屏幕提供本地bloc

您需要使用BlocProvider.value集团传递给route

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>();
默认情况下

lazy加载BlocProvider。

当与 Create 一起使用时,它会自动处理关闭实例。默认情况下,仅在访问实例时调用 Create。若要覆盖此行为,请将 lazy 设置为 false。

因此,最佳做法不是在路由之间传递bloc,而是:

使用MultiBlocProvider提供main.dart中的所有BlocProvider

并在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]);访问它

相关内容

  • 没有找到相关文章

最新更新