2

我正在尝试在 Flutter 中构建一个费用跟踪器应用程序,并决定使用 Scoped Model 进行状态管理。该应用程序有一个用户,他可以有多个帐户,每个帐户可以有许多交易。

我如何对这些进行建模以与 Scoped Model 一起使用,我一直在选择一个好的架构。

如果我创建一个包含 Accounts 列表的 UserModel,其中每个 Account 都是 AccountModel,那么从 AccountModel 内部触发和更新不会触发访问 UserModel 类的那些。

4

3 回答 3

2
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');

  }
}

您可以在源代码中看到完整的示例。

于 2019-01-16T11:19:53.883 回答
2

让我们从一个主要问题开始作用域模型是 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 个模型时才使用此解决方案

我希望我对想知道如何使用它的人有所帮助

于 2019-06-20T19:19:17.900 回答
-1

我有一个搜索过滤器 UI,允许用户应用:排序顺序类别选择的位置选择(因为应用程序是位置感知分类列表)

这 3 个过滤器触发对 REST API 的调用。过滤器菜单在 endDrawer(右侧导航抽屉)中管理 支架主体具有与未来构建器加载列表相关的列表视图

更好的例子是 GumTree 应用程序(https://play.google.com/store/apps/details?id=com.ebay.gumtree.au&hl=en

我想坚持使用范围模型。我有 2 个存储库(类别和位置)与本地存储或 API 通信

我相信坚持范围模型来管理类别和位置将是个好主意。

有什么建议么...

于 2019-10-30T10:22:58.597 回答