我正在构建一个应用程序,并希望使用Provider作为我的常用DI工具。
我想构建具有以下架构的应用程序:
视图是普通的简单UI,视图模型支持(几乎)每个视图。这些视图模型依赖于由服务保存的值。
使用ChangeNotifierProvider
扩展了视图模型,以反映UI中的更改,这行之有效。但是我应该使用什么来响应服务中的更改。单个服务可以在多个视图模型中使用,当然,我需要使所有视图模型保持最新。
我已经查阅了Flutter Provider v3 Architecture using ProxyProvider for Injection中的一些教程,但实际上并没有向我解释这种情况,或者我听不懂。
ProxyProvider
用于此处的其他情况。 Viewmodel向服务发出请求,但是它的值直接在UI中使用。
使这种连接正常工作的正确方法是什么?在这种情况下,我应该使用ChangeNotifierProxyProvider
吗?我应该使用流吗?
答案 0 :(得分:1)
使用di就像您说的那样有ProxyProvider; ProxyProvider可以作为应用程序作用域(在应用程序小部件顶部声明,因此可以在应用程序内的任何位置(例如AuthService)进行访问),也可以将小部件(屏幕)作为作用域(例如,ViewModel)
在此示例中,A是MyWidget的ViewModel,B是Service 附言您应该在此层次结构的顶部为另一个提供者提供B类,以便ProxyProvider可以访问它以“提供”给A类
ProxyProvider<B, A>(
create: (_) => A(),
update: (_, b, a) => a..bClassVariable = b,
dispose: (_, a) => a.dispose(), //if you use streams
child: MyWidget(
),
)
关于最后一个答案,没有答案),只有您应该确定哪种方法更适合您的需求,如果您熟悉ViewVievModel,则可以继续使用它,或者学习诸如BloC之类的新知识
Ps。如果使用ViewModel,ChangeNotifierProxyProvider会正常工作 如果使用bloc,则应使用流