【发布时间】:2019-07-23 08:07:41
【问题描述】:
我最近一直在玩 Scoped Model,想知道是否有更好的方法将多个模型推送到树上供儿童使用。
假设我有一个“AppModel”,它是我需要的所有模型的组合
class AppModel extends Model
{
ModelA a = new ModelA();
ModelB b = new ModelB();
ModelC c = new ModelC();
}
我首先将此模型添加到来自 main 的树中
runApp(ScopedModel<AppModel>(
model: AppModel(),
child: MaterialApp(
title: 'MyApp',
home: Home(),
)),);
这会导致应用程序从主页开始,并且树中有一个可用的 AppModel
主页是一系列按钮,每个按钮都指向另一个页面,该页面可能使用 AppModel 中的多个模型
按下按钮时,我想打开相关页面并传递 AppModel 所需的“子模型”
目前,我的按钮有 onPressed,看起来像这样,我在其中嵌套了 Scoped Models
() => Navigator.push(context,
MaterialPageRoute(builder: (context) => ScopedModel<ModelA>
model: ScopedModel.of<AppModel>(context).a,
child: ScopedModel<ModelB>(
model: ScopedModel.of<AppModel>(context).b,
child: PageAB())))))),
在PageAB 内,我可以通过ScopedModel.of() 访问相关模型
ScopedModel.of<ModelA>(context).modelAGet
ScopedModel.of<ModelA>(context).modelAFunc()
ScopedModel.of<ModelB>(context).modelBGet
ScopedModel.of<ModelB>(context).modelBFunc()
这是共享(多个)模型的正确方法吗?还是有更优雅的解决方案?
【问题讨论】:
-
我已经在这个链接上回答了这个问题,它也可以帮助那些仍在考虑将多个模型组合在一个模型中的人。 stackoverflow.com/a/56692571/3589715
标签: flutter scoped-model