【发布时间】:2019-10-19 08:52:36
【问题描述】:
我有两个应该相互通信的小部件。两者都连接了 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
【问题讨论】:
-
BaseWidget 是否也包含在 Consumer 中?
-
实际上不是,但可以肯定 CalendarViewModel 被包裹在 BaseWidget 中。我更新了源代码以清除
标签: design-patterns flutter dart widget viewmodel