我是 Flutter 的新手,对未来的功能有问题。我在其他屏幕上有一个等待函数及其返回列表,但是当我在一个未来函数中使用多个等待函数时,它返回一个空列表并在许多其他等待函数执行之前执行。我的问题是为什么我未来的函数返回一个空列表我在互联网上尝试了几乎所有东西请帮忙
Future<List<AllShefz>> getAllShefz() async {
List<AllShefz> allShefz = [];
var data = await FirebaseDatabase.instance
.reference()
.child("Resturants")
.once()
.then((DataSnapshot datasnapshot) async {
if (datasnapshot != null) {
Map<dynamic, dynamic> values = await datasnapshot.value;
values.forEach((key, value) async {
await FirebaseDatabase.instance
.reference()
.child("Resturants")
.child(key)
.child("Profile")
.once()
.then((DataSnapshot snapshot) async {
print(" I am here");
Map<dynamic, dynamic> newvals = await snapshot.value;
var position, name, gender, status;
if (await snapshot.value != null) {
position = await newvals["Position"];
name = await newvals["Name"];
gender = await newvals["Gender"];
status = await newvals["Status"];
if (position != null && status == "Approaved") {
var arr = ltlnClass().getSplit(position);
String latStr = arr[0];
String lngStr = arr[1];
String myPosition;
await new MyLocation()
.getMyLocation()
.then((value) => {myPosition = value.toString()});
var arr2 = ltlnClass().getSplit(myPosition);
String latStr2 = arr2[0];
String lngStr2 = arr2[1];
double lat2 = double.parse(
ltlnClass().getLtlng(ltlnClass().getIndex(latStr), latStr));
double lng2 = double.parse(
ltlnClass().getLtlng(ltlnClass().getIndex(lngStr), lngStr));
double lat1 = double.parse(ltlnClass()
.getLtlng(ltlnClass().getIndex(latStr2), latStr2));
double lng1 = double.parse(ltlnClass()
.getLtlng(ltlnClass().getIndex(lngStr2), lngStr2));
double distance =
DistanceCalculator().distance(lat1, lat2, lng1, lng2);
print("Lng 1" + lng1.toString());
print("Lng 2" + lng2.toString());
print("Lat 1" + lat1.toString());
print("Lat 2" + lat2.toString());
print("Distance is " + distance.toString());
AllShefz myShef =
new AllShefz(key, position, distance, gender, name, status);
setState(() {
allShefz.add(myShef);
});
}
}
return allShefz;
});
});
} else {
print("Null value found");
}
});
return allShefz;
}
```.