我有一个父窗口小部件,其中包含一个清单。更新清单后,它应该更新一个提供程序,然后在父小部件中有一个使用者。但是由于某种原因,消费者中的价值似乎是“旧”价值,而不是新价值。我已经检查了它是该对象的完全相同的实例。即使在调试时,它也会先执行更新并通知部件,然后再通知使用方,但是使用方值仍然是旧值。
解释可能很糟糕,所以下面是代码片段:
消费者:
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的第一次加载中,日志为:
然后,当我选中1个复选框(因此总共选择了1个)时,日志为:
因此我们可以看到“ 1”是正确的,但在“重建”对话框中的“ 0”却是错误的。然后,当我取消选中该复选框(因此总共选择了0个)时,日志为:
说实话,我对重建对话框为何访问某些地方不应该存在的先前值感到困惑。有什么想法吗?