我开始使用提供程序包进行状态管理,并以一种基本方式使用它。 随着应用程序变得越来越复杂,我想扩展使用范围。
现在我想到的是这种模型结构:List<Client>
具有List<Product>
(更深层次的是List<Component>
)。
我有一个为客户端使用ChangeNotifierProvider的MultiProvider,这意味着List<Client>
由提供商管理,到目前为止一切顺利。
现在,我想直接在提供者中使用List<Product>
,或者稍后在List<Component>
中使用List<Product>
。我不想遍历List<Client>
...到组件。
这里有一张图片map of the structure可以显示。
这是一些简化的代码:
// Just an example idea of..
Class Product with ChangeNotifier {
final String title;
}
Class Client with ChangeNotifier {
final String name;
final String List<Product>;
}
Class Clients with ChangeNotifier {
final List<Client> _items;
}
void main() {
// start the app
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (ctx) => Clients()),
// How to provide a List<Product> that actually in the model
// belongs to a Client in the List<Client>
],
child: MaterialApp(
body: ...
)
);
}
}
所以主要问题是如何提供模型中实际的List<Product>
属于List<Client>
中的客户?
答案 0 :(得分:0)
感谢您在评论中的帮助。
似乎有两种可能的解决方案。
因此在我的示例中,列表和列表处于同一级别,并且都具有
ChangeNotifierProvider。 The product model holds the id of it's client
,并且列表具有方法getbyClientId(clientId),该方法将导致筛选出的产品列表到达指定的客户端。就是这样。
我选择了第一种方法,因为在我看来,这是正确的方法。经过一段时间的努力,我不能说这是一个错误的决定,所以我可以自由选择。
在其他情况下,第二种方法可能更好。我没有在ChangeNotifierProxyProvider上投入太多时间,所以请查看其他来源以获取更多详细信息。