Closed Guo-Zhang closed 1 year ago
是否需要把APIClient的逻辑并入ViewModel或者Model?
由于我们的API是围绕Model的REST API,因此APIClient的写法不是最优雅的方案,也不太方便和本地存储统一。
有两种方案。
倾向于方案1,不过如何改进现有的API调用方案还需要考虑。
ViewModel在REST的设计下也有标准化的可能。
假设有一个模型Model,那么可以确定的ViewModel有list和detail。
难以解决的问题是创建逻辑。创建逻辑需要list的API,但是和detail一样需要处理单个数据的具体值。因此用其中一个或者单独一个似乎都可以。
计划使用BLoC模式实现。
在Flutter中,可以使用
provider
包来实现MVVM模式。下面是使用provider
定义一个ViewModel的一般步骤:首先,导入
provider
包:创建一个继承自
ChangeNotifier
的ViewModel类,并在其中定义需要管理的状态和相应的操作方法。ChangeNotifier
是provider
包提供的用于实现状态管理的基类。在上面的例子中,
MyViewModel
类维护了一个message
状态,并提供了一个updateMessage
方法用于更新该状态。在状态更新后,通过调用notifyListeners()
方法通知视图更新。Provider
来提供ViewModel实例,并在需要使用ViewModel的地方使用Consumer
来订阅状态的变化。在上面的例子中,
ChangeNotifierProvider
用于提供ViewModel的实例,Consumer
用于订阅ViewModel的状态变化。在builder
回调函数中,可以根据ViewModel的状态来构建相应的UI。当调用
viewModel.updateMessage
方法更新message
状态时,Consumer
会重新构建其子树,从而更新UI。这就是使用
provider
包在Flutter中定义一个ViewModel的一般过程。通过使用provider
,可以方便地实现状态管理和视图更新,实现MVVM模式的开发。