代码之家  ›  专栏  ›  技术社区  ›  zerozuro

当我发出列表时,Bloc State没有重新加载或更新小部件ui

  •  0
  • zerozuro  · 技术社区  · 1 年前

    我试图在block中使用add/remove功能更改listSelctedTest,但我的ui小部件在发出listSelectedTest后没有重新加载/更新。但是,如果使用ctr+s/hot-reload,它将更改为新值并重新加载我的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(),但没有任何变化

    1 回复  |  直到 1 年前
        1
  •  1
  •   Dhafin Rayhan    1 年前

    在这一行中:

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

    您没有复制列表,而是该列表仍然引用与当前处于该状态的列表相同的列表。代替 state.copyWith().listSelectedTest 具有 [...state.listSelectedTest] 以便确保当前状态不会受到下一行中使用 remove add 方法这将使你打电话之前和之后的状态 emit 实际上是不同的,因此小部件将根据更改进行重建。