Flutter如何将Firestore数组的所有元素添加到本地RxList
代码问题原因
- 循环条件逻辑错误:你写的
for (var i = 0; i >= count; i++),初始i为0,count是拿到的数组长度10,0 >= 10结果为false,循环直接不会执行,正确的循环条件应该是i < count - 取值字段错误:你要存入的是
dersler字段下的数组元素,不是TYT字段,循环内应该取value.data()!["dersler"][i] - 状态更新时机错误:Firestore的get()是异步操作,
then回调会在网络请求完成后才执行,你把update()写在then回调外面,会在数据还没写入列表前就触发状态刷新,导致页面看不到更新,update()要放在then回调的最后。
实现方案
方案1:直接批量添加(更简洁,无需循环)
docCek() { firestoreInstance.collection("icerik").doc("TYT").get().then((value) { // 如果需要清空旧数据就保留这行,不需要可以删除 dersler.clear(); // 直接把Firestore返回的整个dersler数组批量添加到RxList dersler.addAll(List.from(value.data()!["dersler"])); // 数据更新完成后再触发状态刷新 update(); }); }
方案2:修复后的for循环写法
docCek() { firestoreInstance.collection("icerik").doc("TYT").get().then((value) { dersler.clear(); int count = value.data()!["dersler"].length; // 修正循环条件 for (var i = 0; i < count; i++) { // 修正取值字段,取数组对应下标的元素 dersler.add(value.data()!["dersler"][i]); } update(); }); }
内容的提问来源于stack exchange,提问作者Koek
相关产品推荐
相关产品推荐

