将模型从一个屏幕传递到另一个 FLUTTER 的更好方法

Better way to pass model from one screen to another FLUTTER

我在一个项目中使用 Bloc 模式,我对应该以何种方式将模型传递到另一个屏幕感到困惑。

场景如下: 用户将登录。获取 credentials/values 然后将其传递到主屏幕。

截至目前,我们使用 BLoC 模式在用户登录后获取值(将存储在 SigninState 中),然后调用 BlocBuilder 将 state/value 从 SigninState 获取到新屏幕(主屏幕)。

我的想法是通过以下方式重构它:
处理 SigninCubit 中的值。
如果成功,调用 SigninLoaded,
然后将用户模型作为参数传递给下一个屏幕,这样我们就不必在每个屏幕的小部件构建函数中调用 BlocBuilder 来访问用户模型。

有什么优点和缺点吗?

谢谢。

目前将用户模型传递给一个屏幕可能很简单,但是当您有数十个或数百个需要用户的屏幕和对话框时,它很容易失控。

更好的解决方案是使用 BlocProvider 在整个小部件树中提供 Bloc?这样,您就可以从任何地方访问 Bloc,并且只重建需要它的部分树。

BlocProvider.value(
  value: SignInBloc(),
  child: MyApp(),
);

然后构建树中需要它的部分:

Widget build(BuildContext context){
   final state = context.watch<SignInBloc>().state;
   return Scaffold(
}