消费者包含以前的值,而不是新的值

时间:2020-04-11 16:06:57

标签: flutter

我有一个父窗口小部件,其中包含一个清单。更新清单后,它应该更新一个提供程序,然后在父小部件中有一个使用者。但是由于某种原因,消费者中的价值似乎是“旧”价值,而不是新价值。我已经检查了它是该对象的完全相同的实例。即使在调试时,它也会先执行更新并通知部件,然后再通知使用方,但是使用方值仍然是旧值。

解释可能很糟糕,所以下面是代码片段:

消费者:

return Consumer<Settings>(
      builder: (BuildContext context, Settings settings, Widget child) {
      log.d("Build dialog ${settings.activeConditions().getIds().length}");
        return SimpleDialog(
          title: const Text("My Title"),
          children: <Widget>[
            ChooseChecklist(),
          ],
        );
      },
    );

已更改功能的清单:

 onChanged: (value) {
                setState(() {
                  checkboxData[i].isChecked = value;
                  settings.setActiveConditions(ActiveConditions(ids: getChecked()));
                });
              },

设置功能:

  void setActiveConditions(ActiveConditions newValue) {
    _activeConditions = newValue;
    log.d(
        "Active conditions set and notify listeners now ${_activeConditions.getIds().length}");
    notifyListeners();
  }

在我有0个id的第一次加载中,日志为:

  • 重建对话框0

然后,当我选中1个复选框(因此总共选择了1个)时,日志为:

  • 设置活动条件并立即通知侦听器1
  • 重建对话框0

因此我们可以看到“ 1”是正确的,但在“重建”对话框中的“ 0”却是错误的。然后,当我取消选中该复选框(因此总共选择了0个)时,日志为:

  • 设置活动条件并立即通知侦听器0
  • 重建对话框1

说实话,我对重建对话框为何访问某些地方不应该存在的先前值感到困惑。有什么想法吗?

0 个答案:

没有答案