[英]Flutter best practices share data between screen
我是 flutter 的新手,我阅读了很多关于多个 subjets 的文档。 其中之一是在屏幕之间共享数据。 我找到了很多解决方案,当我正在创建一个具有很多功能的基础项目时,我想知道哪个是最好的
基本上,当我们导航时,我们通过下一个构造函数小部件发送数据。
创建一个 singleton 可以从应用程序中的任何地方访问,每次需要发送数据时,将其添加到 session 中,下一个小部件可以检索它。
我读了这个看起来不错的解决方案:
我制作了一个 BLoC 容器 class ,在其中实例化了两个屏幕的 BLoC。 然后在这里我将 BLoC A 的引用设置为我想要发送数据的 BLoC B 的 stream。 BLoC 仍然是解耦的,因为它们彼此一无所知,BLoC A 不会通过 BLoC B 上的构造函数传递,反之亦然,但它只知道它将在其流之一上接收一些数据.
更新:
与 static function 一样:
static InheritedDataProvider of(BuildContext context) => context.inheritFromWidgetOfExactType(InheritedDataProvider);
}
因此,您可以通过以下方式访问在父级中初始化的数据: final data = InheritedDataProvider.of(context).data;
也许还有其他解决方案,我很高兴知道它们。 谢谢
我用什么:
Navigator.pushNamed(ctx, '/foo', arguments: bar)
调用下一个屏幕。 如果需要,仅包括arguments
(例如“更新详细信息”屏幕)。MaterialApp
的小部件中集中所有可能的路由。在代码中:
...
MaterialApp(
onGenerateRoute: (s) => MaterialPageRoute(builder: (ctx) => _route(s), settings: s),
)
...
Widget _route(RouteSettings route) {
switch (route.name) {
case '/signup':
return SignupRoute();
case '/vendor':
return VendorRoute((route.arguments as Vendor)?.data?.clone());
default:
throw ('No match for ${route.name}');
}
}
最好的方法是将参数传递给构造函数
Navigator.push(
context,
PageTransition(
type: PageTransitionType.fade,
child: LoginPage(
userModel: model,
)));
然后:
class LoginPage extends StatefulWidget {
LoginPage({this.userModel});
User userModel;
@override
_LoginPageState createState() => _LoginPageState(userModel: userModel);
}
class _LoginPageState extends State with TickerProviderStateMixin {
User userModel;
_LoginPageState({this.userModel});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.