另一个模型中的模型列表仅保存列表中所有项目中最后添加的项目

问题描述 投票:0回答:1
for (int x=0; x<listaEquipes.length; x++) {
      await _loadEquipe(listaEquipes[x].id.toString());
      TabelaListaEquipes _reg = TabelaListaEquipes();
      _reg.equipeId = listaEquipes[x].id.toString();
      _reg.equipe = listaAtletaEquipe;
      //print (_reg.equipe![0].nome.toString());
      listaEquipesGeral.add(_reg);
    }

此型号:

class TabelaListaEquipes {

  String? equipeId;
  List<TabelaInscricoes>? equipe;

  TabelaListaEquipes(
      { this.equipeId, this.equipe});
}

现在我看到最后一个reg保存在列表的所有iten中,为什么? 这就对了: listaEquipesGeral[0].equipe == listEquipesGeral[1].equipe ...仍然添加了最后一项。为什么??

_loadEquipe 函数,它也有效,我已经测试过了,

List<TabelaInscricoes> listaAtletaEquipe = [];
Future<void> _loadEquipe(equipId) async {
    setState(() {
      listaAtletaEquipe.clear();
      carregandoEquipe = true;
    });

    TabelaInscricoes _result =  TabelaInscricoes();
    CollectionReference _dbCollection = FirebaseFirestore.instance.collection('campeonatos').doc(resultSelect.campId).collection('divisoes').doc(resultSelect.divId).collection('equipes').doc(equipId).collection('atletas');
    await _dbCollection.orderBy('pos2', descending: false).get().then((QuerySnapshot querySnapshot) async {
      if (querySnapshot.docs.isNotEmpty) {
        querySnapshot.docs.forEach((element) async {

          _result = TabelaInscricoes.fromJson(element.data()! as Map<String, dynamic>);
          if (_result.campId == resultSelect.campId && _result.divId == resultSelect.divId) {
            _result.id = element.id;
            _result.filePath = "";
            setState(() {
              listaAtletaEquipe.add(_result);
            });
          }
        });

        for (int x = 0; x<listaAtletaEquipe.length; x++) {
          for (int y = 0; y<listaAtletas.length; y++) {
            if (listaAtletaEquipe[x].atletaId.toString() == listaAtletas[y].id.toString()) {
              setState(() {
                listaAtletaEquipe[x].nome = listaAtletas[y].nome;
                listaAtletaEquipe[x].fotoNome = listaAtletas[y].fotoNome;
                listaAtletaEquipe[x].filePath = listaAtletas[y].filePath;
                listaAtletaEquipe[x].dataN = listaAtletas[y].dataN;
                listaAtletaEquipe[x].fone1 = listaAtletas[y].fone1;
                listaAtletaEquipe[x].fone2 = listaAtletas[y].fone2;
                listaAtletaEquipe[x].nTitulo = listaAtletas[y].nTitulo;
                listaAtletaEquipe[x].info = listaAtletas[y].info;
                listaAtletaEquipe[x].email = listaAtletas[y].email;

              });
            }
          }
        }

        for (int x=0; x<listaAtletaEquipe.length; x++) {
          if (listaAtletaEquipe[x].fotoNome.toString().isNotEmpty) {
            await MyStorage.getUrl(context, "atletas/${listaAtletaEquipe[x].fotoNome.toString()}").then((value) {
              setState(() {
                listaAtletaEquipe[x].filePath = value;
              });
            });
          }
        }
        setState(() {
          carregandoEquipe = false;
        });
      }else {
        setState(() {
          carregandoEquipe = false;
        });
      }

    });
  }

AtletaEquipes 型号操作系统列表:

class TabelaInscricoes{

  bool? carregando = true;
  String? id;
  String? campId;
  String? divId;
  String? atletaId;
  String? nome_responsavel;
  String ?posicao;
  String? filePath;
  Uint8List? imageFile;
  String? usuario;
  String? nInscricao;
  String? nome;
  String? dataN;
  String? nTitulo;
  String? fone1;
  String? fone2;
  String? info;
  String? email;
  String? fotoNome;
  String? pos2;
  String? selected;

  TabelaInscricoes({ this.carregando, this.nome, this.dataN, this.nTitulo, this.fone1, this.fone2, this.info, this.email, this.id, this.campId, this.divId, this.posicao,  this.nome_responsavel,
      this.nInscricao, this.atletaId, this.selected, this.pos2, this.fotoNome, this.filePath, this.imageFile, this.usuario});


  Map<String, dynamic> toJson() => {
    'campId': campId,
    'divId': divId,
    'atletaId': atletaId,
    'nome_responsavel': nome_responsavel,
    'posicao': posicao,
    'usuario': usuario,
    'nInscricao': nInscricao,
    'pos2': pos2,
    'selected': selected
  };


  TabelaInscricoes.fromJson(Map<String, dynamic> json) :
        campId = json['campId'],
        divId = json['divId'],
        atletaId = json['atletaId'],
        nome_responsavel = json['nome_responsavel'],
        posicao = json['posicao'],
        nInscricao = json['nInscricao'],
        pos2 = json['pos2'],
        selected = json['selected'],
        usuario = json['usuario'];
}

这里发生了什么,listaEquipesGeral 总是保存最后添加的所有项目。

flutter list model
1个回答
0
投票

我明白了,解决方案是在模型内的列表中逐项添加:

for (int x=0; x<listaEquipes.length; x++) {
      await _loadEquipe(listaEquipes[x].id.toString());
      TabelaListaEquipes _reg = TabelaListaEquipes();
      _reg.equipeId = listaEquipes[x].id.toString();
      _reg.equipe = [];
      //here above the solution, include for to put item by item, and it works
      for (int y = 0; y<listaAtletaEquipe.length; y++) {
        _reg.equipe!.add(listaAtletaEquipe[y]);
      }
      //print (_reg.equipe![0].nome.toString());
      listaEquipesGeral.add(_reg);
    }
© www.soinside.com 2019 - 2024. All rights reserved.