如何在 StateNotifier 中将一个列表复制到另一个列表中,以便它随着每次更改而更新

How to copy a list into another in a StateNotifier, so it update with every change

列表 EleccionSinSeleccionClase 只是一个 class 的列表,上面有一个字符串。

class EleccionSinSeleccionClase {
  String Eleccion;
}

状态列表是另一个class:

class EleccionConSleccionClase {
  String Eleccion;
  bool selec;
}

问题是我想复制第一个进入StateNotifier的状态,这一行打断了代码。 这是行:state[i].Eleccion = ListaElecciones[i].Eleccion;

class EleccionesConSeleccionNotifier
    extends StateNotifier<List<EleccionConSleccionClase>> {
  final List<EleccionSinSeleccionClase> ListaElecciones;

  EleccionesConSeleccionNotifier({required this.ListaElecciones}) : super([]);

  void init(){
    print(ListaElecciones.length.toString());
    if(ListaElecciones.length != 0){
      for (int i = 0; i < ListaElecciones.length; i++) {
        state[i].Eleccion = ListaElecciones[i].Eleccion;  ////HERE////
      }
    }
  }
}

final eleccionConSleccionStateNotifierProvider = StateNotifierProvider<
    EleccionesConSeleccionNotifier, List<EleccionConSleccionClase>>((ref) {
  final eleccioneswatch =
      ref.watch(eleccionesSinSeleccionStateNotifierProvider);

  return EleccionesConSeleccionNotifier(ListaElecciones: eleccioneswatch)..init();
});

可能问题在于您将状态初始化为空列表 super([]) 然后您试图更改不存在的索引中的值(state[i] 列表所在的位置显然是空的,无法访问该位置)

void init(){
    print(ListaElecciones.length.toString());
    if(ListaElecciones.length != 0){
      /// you will need to check if both lists are the same lenght if you actually want to do this
      /// without failling
      /*for (int i = 0; i < ListaElecciones.length; i++) {
        state[i].Eleccion = ListaElecciones[i].Eleccion;  ////HERE////
      }*/
      /// if you only want to copy Eleccion parameter in a new class this would be the easiest way
      state = ListaElecciones.map((cb) => EleccionConSleccionClase(Eleccion: cb.Eleccion)).toList();
    }
  }