【问题标题】:flutter exchange data between two viewmodels在两个视图模型之间颤动交换数据
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多