将模型从一个屏幕传递到另一个 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(
}
我在一个项目中使用 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(
}