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 总是保存最后添加的所有项目。
我明白了,解决方案是在模型内的列表中逐项添加:
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);
}