颤振器在两个视图模型之间交换数据

问题描述 投票:0回答:1

我有两个应该相互通信的小部件。两者都连接了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

我有两个应该相互通信的小部件。两者都有一个ViewModel连接。日历小部件:BaseWidget ((模型:CalendarViewModel(),生成器:...

design-patterns flutter dart widget viewmodel
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.