我知道这是一个非常常见的问题,很多人已经要求它,但我不知道我的代码出了什么问题
@override
void initState() {
getUserPosition();
super.initState();
}
void getUserPosition() async{
Position positionTemp = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
setState((){
position = positionTemp;
});
}
@override
Widget build(BuildContext context) {
return FlutterMap(
options: MapOptions(
center: LatLng(position.latitude, position.longitude),
zoom: 13.0,
),)}当我需要position.latitude和position.longitude时,在MapOptions中调用该错误
发布于 2021-11-03 16:09:29
你不是第一个,也不会是最后一个,但稍微研究一下会对你有所帮助:使用FutureBuilder。
late final Future<Position> _init;
@override
void initState() {
super.initState();
_init = getUserPosition();
}
Future<Position> getUserPosition() async{
return await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}
@override
Widget build(BuildContext context) {
return FutureBuilder<Position>(
future: _init,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
// Return a widget to be shown while the position is being fetch
return Center(child: CircularProgressIndicator());
if (snapshot.hasError)
// Return a widget to be shown if an error ocurred while fetching
return Text("${snapshot.error}");
// You can access `position` here
final Position position = snapshot.data!;
return FlutterMap(
options: MapOptions(
center: LatLng(position.latitude, position.longitude),
zoom: 13.0,
)
);
}
);
}发布于 2021-11-03 16:47:32
我相信你的问题是你没有等待初始化的位置。为了确保position在其余代码之前被初始化,我将执行以下操作:
@override
void initState() {
getUserPosition().then((positionTemp) {
position = positionTemp;
super.initState();
});
}
Future<void> getUserPosition() async {
Position positionTemp = await Geolocator.getCurrentPosition(desiredAccuracy:
LocationAccuracy.high);
}在这段代码中,您调用getUserPosition(),直到它没有完成(所以positionTemp有一个值,在它被赋值给position之后),它不会继续。
https://stackoverflow.com/questions/69828118
复制相似问题