首先,我是一个业余爱好者,我提前感谢你的帮助!
在我的项目中,我通过这个函数从Cloud Firestore检索数据:
recupereOrganisations(pays) async {
listeOrganisations.clear();
try{
final reponseGet = (await FirebaseFirestore.instance.collection("Organisations").where("Pays", isEqualTo: "Belgium").get())
.docs.map((e) => e.data());
reponseGet.forEach((element) {
listeOrganisations.add(Organisations(
nom: "${element["Nom"]}",
activite: "${element["Activité"]}",
motcle1: "${element["MotCle1"]}",
motcle2: "${element["MotCle2"]}",
motcle3: "${element["MotCle3"]}",
nbpmt: element["NbPmt"],
photo: "${element["Photo"]}",
latitude: "${element["Latitude"]}",
longitude: "${element["Longitude"]}",
pays: "${element["Pays"]}",
));
});
listeOrganisations.sort((a,b) => a.nbpmt!.compareTo(b.nbpmt!));
listeOrganisations.forEach((element) {
print("Le nom est : ${element.nom} et le nombre de paiements est de ${element.nbpmt}");
});// this is a test to ensure everything is working (test successful)
return listeOrganisations;
}
catch(e){
print(e);
}
}
所以,我的列表是用存储在Firebase中的数据填充的,然后列表被排序,直到这里。
当我尝试在我的构建框架中“使用”列表时出现了问题。
@override
Widget build(BuildContext context) {
//recupereOrganisations("Belgium");
//print(" l'élément à imprimer est ${recupereOrganisations[2].activite}");
return Scaffold(
backgroundColor: noirFond,
appBar: appbar,
body: widgetListeTrieePmt(context),
);
}
Widget widgetListeTrieePmt (context){
recupereOrganisations("Belgium");
print(" test sur la liste ${listeOrganisations[2].activite}");
return Container(
在return语句之后,它与错误不再相关...
错误出现在我执行打印的行中,我从错误消息中了解到,当我尝试打印时,列表“listOrganisations”为空。
因为函数可以工作,所以我猜它来自异步的东西,代码在异步函数完成之前继续...
我尝试了几种方法,但都没有带来解决方案:
- 在生成的返回中放置一个条件:如果((列出组织== null)||(listeOrganisation.isEmpty))并仅在为false时调用小部件
- 与之前相同,但支架主体除外
- 调用init中的函数(并添加一个.then((value)=〉setState列表
- 在函数的末尾放置一个setSate(在那里似乎会使函数循环,因为列表的打印(foreach循环)不会停止重复。
- ...
所以,我被困住了。
提前感谢您的帮助!
贝尔纳
2条答案
按热度按时间dgtucam11#
错误来自print语句
你试图访问一个数组中不存在的索引。记住dart有一个从零开始的数组索引,列表中的第一项的索引为0。
你可以在尝试访问数组中的任何项之前检查数组是否为空。
例如
在本例中,我访问的是数组的第一项。
在您要访问数组中的第三个项目的情况下,您需要检查数组是否最多有3个项目
rqenqsqc2#
我找到了一个解决方案,问题是来自异步任务。我把一个布尔值(donneesRecues)初始化为false,然后调用init中的recupreOrganisation函数。然后将布尔值设置为true。下面是代码:
之后,在构建中,我返回一个带有Container作为子容器的Scaffold,并且对于这个Container的子容器,我在布尔值上设置了一个条件:
onPatiente(上下文)显示等待页面,onAffiche(上下文)执行我想执行的操作。
感谢那些花时间回答我的人!
贝尔纳