gpt4 book ai didi

flutter - 为什么此 future 函数返回空列表抖动

转载 作者:行者123 更新时间:2023-12-03 04:18:10 26 4
gpt4 key购买 nike

我是新手,对 future 的功能有疑问。我在其他屏幕上有一个单一的等待函数及其返回列表,但是当我在单个 future 函数中使用多个等待函数时,它将返回一个空列表,并在许多其他等待函数执行之前执行。我的问题是为什么我以后的功能会返回一个空列表,而我在互联网上尝试了几乎所有内容,请帮忙


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;
}

```.

最佳答案

您似乎在混合.thenawait调用。这是可能的,但对于初学者(如果坦率地说他们还没有正确的咖啡因剂量,甚至是专家,也很容易出错)。
我建议您删除所有.then延续,并用await代替。这样,您可以正确调试代码,并找出在等待异步调用时错过的地方。您的缩进级别应该缩小到可以管理的水平,并且您将能够轻松找到错误。

关于flutter - 为什么此 future 函数返回空列表抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64241711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com