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