Dart 使用范围模型的多模型颤振

Dart 使用范围模型的多模型颤振,dart,flutter,state,scoped-model,Dart,Flutter,State,Scoped Model,我正试图在Flatter中构建一个费用跟踪应用程序,并决定使用作用域模型进行状态管理。该应用程序有一个可以拥有多个帐户的用户,每个帐户可以有多个交易 如何对这些模型进行建模要与作用域模型一起使用,我必须选择一个好的体系结构 如果我创建了一个UserModel,其中有一个帐户列表,其中每个帐户都是AccountModel,那么从AccountModel内部触发和更新不会触发访问UserModel类的帐户。class CombinedWidget扩展了无状态Widget{ class Combine

我正试图在Flatter中构建一个费用跟踪应用程序,并决定使用作用域模型进行状态管理。该应用程序有一个可以拥有多个帐户的用户,每个帐户可以有多个交易

如何对这些模型进行建模要与作用域模型一起使用,我必须选择一个好的体系结构

如果我创建了一个UserModel,其中有一个帐户列表,其中每个帐户都是AccountModel,那么从AccountModel内部触发和更新不会触发访问UserModel类的帐户。

class CombinedWidget扩展了无状态Widget{
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');

  }
}
@凌驾 小部件构建(构建上下文){ 最终用户名= ScopedModel.of(上下文,重建更改:true)。用户名; 最终计数器= ScopedModel.of(上下文,重建更改:true).counter; 返回文本(“$username点击按钮$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'),
     ),
   ),
  );
 }
}
小部件构建(构建上下文){
//在应用程序的顶层,我们将创建一个ScopedModel小部件
//将向应用程序中请求该模型的所有儿童提供该模型
//使用ScopedModelSecondant。

return ScopedModel(//我有一个搜索筛选器UI,允许用户应用: 排序顺序 选定类别 所选位置(因为应用程序是位置感知分类列表)

这3个过滤器触发对REST API的调用。过滤器菜单在endDrawer(右侧导航抽屉)中管理。scafold主体的列表视图与将来的生成器加载列表绑定

更好的例子是GumTree应用程序()

我想坚持使用作用域模型。我有两个存储库(类别和位置)与本地存储或API对话

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


任何建议…

为什么它
“不会触发”?这与我正在使用的模式很接近。也在SimeDeMod调用中嵌套SimeDeMe模型,使它们都在树上可用。这不只是DOCS示例,而是如何以及在何处传递这两个作用域模型以使它们在CudieWIDGET中可用?如果这是一个问题,那么您应该考虑为此创建一个新的Topik。
return ScopedModel<UserModel>(
  model: UserModel(),
  child: MaterialApp(
    theme: ThemeData(
      primaryColor: PrimaryColor,
    ),
    home: new SplashScreen2(),
  ),
);
return ScopedModel<TimerModel>(
model: TimerModel(),
child: Scaffold(
child:Center(_widget)
 ),
);