我尝试使用块中的添加/删除功能更改 listSelectedTest,但我的 ui 小部件在发出 listSelectedTest 后不会重新加载/更新。但是,如果使用 ctr+s/热重载,它将更改为新值并重新加载我的 ui 小部件。旧值 = 2 和新值 = 2 & 4。
块
void _onChangeTest(OnPriceChangeTest event, var emit) {
final state = this.state;
if (state is PriceChangeTest) {
try {
List<String> listSelectedTest = state.copyWith().listSelectedTest ?? [];
printlog("price change test-1", "$listSelectedTest");
if (event.selected) {
listSelectedTest.remove(event.value);
} else {
listSelectedTest.add(event.value);
}
printlog("price change test-2", listSelectedTest.toString());
emit(
state.copyWith(
listSelectedTest: listSelectedTest,
),
);
} catch (e) {
printlog("price change test", e.toString());
}
}
我尝试使用扩展运算符(...)和List.from(),但没有任何改变
在这一行中:
List<String> listSelectedTest = state.copyWith().listSelectedTest ?? [];
您不是在复制该列表,而是该列表仍然引用与当前所在州的列表相同的列表。将
state.copyWith().listSelectedTest
替换为 [...state.listSelectedTest]
,以便确保当前状态不会受到下一行中使用 remove
或 add
方法所做的修改的影响。这将使您调用 emit
之前和之后的状态实际上有所不同,以便小部件将根据更改进行重建。