我有两个应该相互通信的小部件。两者都连接了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
我建议使用get_it将视图模型引用为单例,以免在每次构建视图时都实例化视图模型。这样,视图模型可以相互引用和更新,然后通知它们各自的视图。