design-patterns - 在两个视图模型之间颤动交换数据
问题描述
我有两个应该相互通信的小部件。两者都连接了 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
解决方案
我建议使用 get_it 将视图模型引用为单例,以便在每次构建视图时都不实例化视图模型。这样视图模型可以相互引用和更新,然后通知它们各自的视图。
推荐阅读
- c# - 如何在不使用 ItemSource 的情况下以编程方式从 WPF 中的 DataTable 填充 dataGrid
- android - X 轴标签未显示在 LineChart (MpAndroidChart) 中
- swift - Mapbox + Swift:更改图层图像
- java - java日历中的未来日期给出了一个奇怪的行为
- javascript - 意外的 Chrome 自动填充行为 [禁用 chrome 自动填充]
- ios - 在表格上显示排序结果 - Swift4
- xml - XSLT 1.0 两个不同节点之间的所有节点
- jquery - 无法通过 AJAX 调用 WebAPI 方法,如果在 AJAX 调用中使用了调试器,则可以使用
- javascript - HTML5 Canvas - 当它超出我的矩形时隐藏文本部分
- python - 为什么 django 不使用我的自定义编码器类?