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

Posted

技术标签:

【中文标题】将模型从一个屏幕传递到另一个 FLUTTER 的更好方法【英文标题】:Better way to pass model from one screen to another FLUTTER 【发布时间】:2021-04-25 17:19:54 【问题描述】:

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

这是场景: 用户将登录。获取凭据/值,然后将其传递到主屏幕。

到目前为止,我们使用 BLoC 模式来获取用户登录后的值(将存储在 SigninState 中),然后调用 BlocBuilder 将该状态/值从 SigninState 获取到新屏幕(主页-屏幕)。

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

有什么优点和缺点?

谢谢。

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

您好,Wilson,正如我上面所说,我们目前正在使用该方法。但我认为是把Navigator中的User模型作为下一屏的参数传递。 但是一旦我们调用 SignInLoaded 状态,我们就已经在传递值了,对吗?很抱歉我是 BLoC-Cubit 的新手,所以我很困惑。

以上是关于将模型从一个屏幕传递到另一个 FLUTTER 的更好方法的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中将数据从一个屏幕传递到另一个屏幕是 null

将数据从另一个类传递到另一个类 onPressed Flutter

使用 Flutter Provider 将数据传递到另一个屏幕

我是flutter的新手,我想将用户详细信息名称,地址,手机号码,电子邮件等数据传递到另一个屏幕,你能告诉我怎么做吗[重复]

Flutter:如何将变量从 StatelessWidget 传递到 StatefulWidget

单击 Gridview 项时将数据传递到另一个屏幕