【发布时间】:2020-03-12 11:34:23
【问题描述】:
也许这是一个新手问题,但我正在学习颤振,并且一些东西,如 async、await、Future,还不适合我的想法。无论如何,我想做的是从“field.documents[index][”name”]”中获取值并建立一个列表。这是我的代码:
String productName;
Stream<QuerySnapshot> productRef = Firestore.instance
.collection("stores")
.document(name)
.collection("products")
.snapshots();
productRef.forEach((field) {
field.documents.asMap().forEach((index, data) {
productName = field.documents[index]["name"];
//IF I PRINT HERE, IT SHOWS THE PRODUCTS.
});
});
BUT IF I PRINT HERE, I GOT A NULL VALUE
我想在 forEach 之外获取 productName。当我打印时,它首先打印空值。我也会发布我的整个功能:
List mapToList({DocumentSnapshot doc, List<DocumentSnapshot> docList}) {
if (docList != null) {
List<Store> storeList = [];
docList.forEach((document) {
String name = document.data[StringConstant.nameField];
num score = document.data[StringConstant.scoreField];
String delivery = document.data[StringConstant.deliveryField];
String photo = document.data[StringConstant.photoField];
String description = document.data[StringConstant.descriptionField];
String open = document.data[StringConstant.openField];
String close = document.data[StringConstant.closeField];
GeoPoint geoPoint = document.data[StringConstant.positionField]
[StringConstant.geopointField];
bool isOpen = document.data[StringConstant.isOpenField];
final currentHour = DateTime.now();
final openHour = DateTime.parse(open).hour;
final closeHour = DateTime.parse(close).hour;
int openMin = DateTime.parse(open).minute;
int closeMin = DateTime.parse(close).minute;
if (openHour <= currentHour.hour && currentHour.hour <= closeHour) {
isOpen = true;
if ((currentHour.hour == openHour && currentHour.minute < openMin) ||
(currentHour.hour == closeHour &&
currentHour.minute > closeMin)) {
isOpen = false;
}
} else {
isOpen = false;
}
final double meter = distance(
LatLng(latitude, longitude),
LatLng(geoPoint.latitude, geoPoint.longitude),
);
String productName;
Stream<QuerySnapshot> productRef = Firestore.instance
.collection("stores")
.document(name)
.collection("products")
.snapshots();
productRef.forEach((field) {
field.documents.asMap().forEach((index, data) {
productName = field.documents[index]["name"];
});
});
if (meter <= range && isOpen == true) {
Store otherStore = Store(name, photo, score.toDouble(), delivery,
meter, description, productName, 10.0, "");
storeList.add(otherStore);
}
});
return storeList;
} else {
return null;
}
}
有人可以帮助我吗?我知道它与异步编程有关,但我正在学习。谢谢!!!
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore