- 在项目里使用到ChangeNotifierProxyProvider的地方
/// ChangeNotifierProxyProvider
/// 每个动态由单独的 DynamicHabitDetailViewModel 管理,并且依赖于 TeamDetailViewModel
return ChangeNotifierProxyProvider<TeamDetailViewModel, DynamicHabitDetailViewModel>(
create: (context) => DynamicHabitDetailViewModel(viewModel,index-1),
update: (context,teamViewModel,dynamicHabit){
viewModel.dynamicViewModels.add(dynamicHabit);
return dynamicHabit;
},
child: DynamicListItem(),
);
这里的DynamicHabitDetailViewModel实例对象由ChangeNotifierProxyProvider提供,ChangeNotifierProxyProvider组合了两种功能:
(1)它会自动订阅DynamicHabitDetailViewModel中的更改(如果您只想使用此功能,只需使用ChangeNotifierProvider)
(2)它采用先前提供的对象的值(在本例中为TeamDetailViewModel,如上所述),并使用它来构建DynamicHabitDetailViewModel的值(如果您只需要此功能,只需使用ProxyProvider,也就是项目中的ChangeNotifierProxyProvider)
- DynamicHabitDetailViewModel的构建
class DynamicHabitDetailViewModel extends ChangeNotifier{
TeamDetailViewModel teamViewModel;
int index;
DynamicHabitDetailViewModel(this.teamViewModel,this.index){
this.dynamicData = this.teamViewModel.dynamics.elementAt(index);
initData();
notifyListeners();
}
DynamicData _dynamicData;
DynamicData get dynamicData => _dynamicData;
set dynamicData(dynamicData){
_dynamicData = dynamicData;
notifyListeners();
}
}
⚠️注意:
• DynamicHabitDetailViewModel实现为一个ChangeNotifier,它要求使用ChangeNotifierProvider。
• 而且,DynamicHabitDetailViewModel 依赖于 TeamDetailViewModel,因此需要ProxyProvider(ChangeNotifierProxyProvider)。