gpt4 book ai didi

flutter - 链接的异步方法无法在使用FutureBuilder的Widget中显示结果

转载 作者:行者123 更新时间:2023-12-03 04:54:41 24 4
gpt4 key购买 nike

我在文本小部件中显示异步数据时遇到问题。

我正在做两种链式异步方法来搜索坐标,然后从智能手机搜索城市:

Future<String> _getCity() async {
Future<Position> pos = Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
String city = "";

pos.then((result) {
return result;
})
.then((result) async {
List<Placemark> listPlacemark = await Geolocator().placemarkFromPosition(result);
return listPlacemark;
})
.then((result) {
return result.first;
})
.then((result) {
city = result.subAdministrativeArea;
// print( city ); -> Here it's showing correct data in console
});

return city;
}

该城市将显示在控制台上,该命令已被注释掉。

要填充文本小部件,我正在这样做:
Padding(
padding: EdgeInsets.all(12),
child: FutureBuilder<String>(
future: _getCity(), // a Future<String> or null
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Error loading location');
case ConnectionState.waiting:
return Text('Waiting...');
default:
if (snapshot.hasError) {
return Text('Error loading location');
} else {
return Text(snapshot.data);
}
}
},
),
),

我在initState方法内部调用了_getCity方法,它也起作用。
等待消息已经出现,但是现在所有内容都是空白,缺少什么?

感谢您的关注!

最佳答案

即使您从then()的回调中返回值,也不从_getCity()返回该值。您需要返回Future

Future<String> _getCity() async {
Future<Position> pos = Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);

return pos.then((result) {
return result;
}).then((result) async {
List<Placemark> listPlacemark = await Geolocator().placemarkFromPosition(result);
return listPlacemark;
}).then((result) {
return result.first;
}).then((result) {
return result.subAdministrativeArea;
});
}

顺便说一句,您需要这么多 then吗?

我从来没有使用过 Geolocator(),所以这只是一个猜测,但是有些可能会被删除,因为它看起来像 listPlacemarkresult.firstresult.subAdministrativeArea都不是 Future,而您只想从 List<Position>中提取一个值。如果我的猜测是正确的,则将执行以下操作。

Future<String> _getCity() async {
Future<Position> pos = Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);

return pos.then((result) async {
List<Placemark> listPlacemark = await Geolocator().placemarkFromPosition(result);
return listPlacemark.first.subAdministrativeArea;
});
}

关于flutter - 链接的异步方法无法在使用FutureBuilder的Widget中显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60808299/

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