美文网首页
Flutter状态管理 ChangeNotifierProxyP

Flutter状态管理 ChangeNotifierProxyP

作者: Noah_L_JC | 来源:发表于2020-01-04 12:52 被阅读0次
  • 在项目里使用到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)。

相关文章

网友评论

      本文标题:Flutter状态管理 ChangeNotifierProxyP

      本文链接:https://www.haomeiwen.com/subject/snbxactx.html