我正在尝试在 Flutter 中构建一个费用跟踪器应用程序,并决定使用 Scoped Model 进行状态管理。该应用程序有一个用户,他可以有多个帐户,每个帐户可以有许多交易。
我如何对这些进行建模以与 Scoped Model 一起使用,我一直在选择一个好的架构。
如果我创建一个包含 Accounts 列表的 UserModel,其中每个 Account 都是 AccountModel,那么从 AccountModel 内部触发和更新不会触发访问 UserModel 类的那些。
我正在尝试在 Flutter 中构建一个费用跟踪器应用程序,并决定使用 Scoped Model 进行状态管理。该应用程序有一个用户,他可以有多个帐户,每个帐户可以有许多交易。
我如何对这些进行建模以与 Scoped Model 一起使用,我一直在选择一个好的架构。
如果我创建一个包含 Accounts 列表的 UserModel,其中每个 Account 都是 AccountModel,那么从 AccountModel 内部触发和更新不会触发访问 UserModel 类的那些。
class CombinedWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final username =
ScopedModel.of<UserModel>(context, rebuildOnChange: true).username;
final counter =
ScopedModel.of<CounterModel>(context, rebuildOnChange: true).counter;
return Text('$username tapped the button $counter times');
}
}
您可以在源代码中看到完整的示例。
让我们从一个主要问题开始。作用域模型是 MVVM 吗? 我的回答是肯定的,如果必须将实体保存在某个地方,则必须按原样使用它。
所以,我想在使用它两个月后很好地回答你。在我看来,有两种可能性可以更抽象,而不必重新创建模型的结构,如果您不想在视图之间遇到数据管理问题,则可以排除一种,我已经看到使用过的。
首先是经典:
Widget build(BuildContext context) {
// At the top level of our app, we'll, create a ScopedModel Widget. This
// will provide the CounterModel to all children in the app that request it
// using a ScopedModelDescendant.
return ScopedModel<UserModel>( // <========
model: userModel,
child: ScopedModel<CounterModel>( // <========
model: counterModel,
child: MaterialApp(
title: 'Scoped Model Demo',
home: CounterHome('Scoped Model Demo'),
),
),
);
}
}
在我看来,第二个最聪明的方法是全局加载最重要的模型,并且只需要某些视图(例如计时器)将它们插入要使用的页面的最高级别。
第二个例子是这样的: 在 main.dart
return ScopedModel<UserModel>(
model: UserModel(),
child: MaterialApp(
theme: ThemeData(
primaryColor: PrimaryColor,
),
home: new SplashScreen2(),
),
);
在锻炼.dart 中:
return ScopedModel<TimerModel>(
model: TimerModel(),
child: Scaffold(
child:Center(_widget)
),
);
现在,在您的 _widget 中,您可以使用 UserModel 和 TimerModel 的 ScopedModelDescendant..
我不建议您使用混合创建一个主模型并扩展所有其他模型。不幸的是,我看到了一些这样做的视频,但没有解释后果。或者,如果您想这样做,请确保它们之间没有链接,因为这可能会在真正应该更新的内容之间造成混淆,我建议您仅在有 2-3 个模型时才使用此解决方案。
我希望我对想知道如何使用它的人有所帮助
我有一个搜索过滤器 UI,允许用户应用:排序顺序类别选择的位置选择(因为应用程序是位置感知分类列表)
这 3 个过滤器触发对 REST API 的调用。过滤器菜单在 endDrawer(右侧导航抽屉)中管理 支架主体具有与未来构建器加载列表相关的列表视图
更好的例子是 GumTree 应用程序(https://play.google.com/store/apps/details?id=com.ebay.gumtree.au&hl=en)
我想坚持使用范围模型。我有 2 个存储库(类别和位置)与本地存储或 API 通信
我相信坚持范围模型来管理类别和位置将是个好主意。
有什么建议么...