首页 > 解决方案 > 在两个视图模型之间颤动交换数据

问题描述

我有两个应该相互通信的小部件。两者都连接了 ViewModel。

日历小部件:

BaseWidget<CalendarViewModel>(
    model: CalendarViewModel(),
    builder: (context, calendarModel, child) => ...
        Consumer<CalendarViewModel>(
            builder: (context, model, child) {
                model.generateEvents(mainModel.activities);

                return calendar(...);
            },
        ),
class CalendarViewModel extends ChangeNotifier {

}

数据小部件:

BaseWidget<MonthDataViewModel>(
    model: MonthDataViewModel(
        visibleMonth: mainModel.displayedMonth,
    ),
    builder: (context, monthDataModel, child) => 
        Text('${DateFormat('MMMM').format(monthDataModel.visibleMonth)}',),

    ),
),
class MonthDataViewModel extends ChangeNotifier {
  DateTime _visibleMonth;

  MonthDataViewModel({
    @required DateTime visibleMonth,
  }) {
    _visibleMonth = visibleMonth;
  }

  DateTime get visibleMonth => _visibleMonth;
  set visibleMonth(DateTime month) => {
        _visibleMonth = month,
        notifyListeners(),
      };
}

所以现在日历小部件中有一个函数,当可见月份发生变化时它会触发。然后,我想根据月份名称更改 MonthDataWidget 内的文本。这里的问题是,我不知道如何在不破坏模式的情况下连接两个视图模型(或者我是否通过小部件本身交换数据?)

如果这在这里可以提供帮助,我也会使用提供者模式,但实际上我没有注入任何 Viewmodel

标签: design-patternsflutterdartwidgetviewmodel

解决方案


我建议使用 get_it 将视图模型引用为单例,以便在每次构建视图时都不实例化视图模型。这样视图模型可以相互引用和更新,然后通知它们各自的视图。


推荐阅读