当我发出列表时,块状态不重新加载或更新小部件用户界面

问题描述 投票:0回答:1

我尝试使用块中的添加/删除功能更改 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(),但没有任何改变

flutter list state reload bloc
1个回答
0
投票

在这一行中:

List<String> listSelectedTest = state.copyWith().listSelectedTest ?? [];

您不是在复制该列表,而是该列表仍然引用与当前所在州的列表相同的列表。将

state.copyWith().listSelectedTest
替换为
[...state.listSelectedTest]
,以便确保当前状态不会受到下一行中使用
remove
add
方法所做的修改的影响。这将使您调用
emit
之前和之后的状态实际上有所不同,以便小部件将根据更改进行重建。

© www.soinside.com 2019 - 2024. All rights reserved.