我正在尝试从Firestore检索数据,但是数据变得混乱了。
这些是用于检索数据的功能。函数getHomeDevices
出现了问题,我将数据添加到列表mHomeDevices和deviceReferences中,因为在两个列表中,数据都是以不同顺序添加的。
Future getHomeDevices(
String homeName, DocumentReference homeReference) async {
if (mHomeDevices.length > 0) {
mHomeDevices.clear();
}
if (deviceReferences.length > 0) {
deviceReferences.clear();
}
CollectionReference devicesRef = homeReference.collection("homeDevices");
QuerySnapshot eventsQuery = await devicesRef.getDocuments();
final waitList = <Future<void>>[];
for (var document in eventsQuery.documents) {
DocumentReference deviceReference = document["deviceReference"];
waitList.add(
deviceReference.get().then((DocumentSnapshot ds) {
String homeDeviceName = ds["alias"].toString();
mHomeDevices.add(homeDeviceName);
deviceReferences.add(deviceReference);
}),
);
}
await Future.wait(waitList);
}
Future getDeviceSwitches(DocumentReference device) async {
if (switchTraits.length > 0) {
switchTraits.clear();
}
CollectionReference switchesRef = device.collection("switches");
QuerySnapshot eventsQuery = await switchesRef.getDocuments();
eventsQuery.documents.forEach((document) {
String trait = document["trait"];
switchTraits.add(trait);
});
}
这是这些函数的调用方式:
for (int i = 0; i < mUserHomes.length; i++) {
if (mUserHomes[i] == dropdownVal) {
getHomeDevices(dropdownVal, homeReferences[i]).whenComplete(() {
for(int j = 0; j<deviceReferences.length; j++) {
getDeviceSwitches(deviceReferences[j]).whenComplete(() {
print(switchTraits);
});
}
setState(() {});
});
}
}
setState(() {});
在进行日志记录时,我发现mHomeDevices列表的第一个元素与deviceReferences列表的第二个元素相对应。 (此推断基于运行getDeviceSwitches函数后的日志,因为我无法直接读取Document References的值。