Has*_*eeb 3 google-maps dart flutter
我试图从谷歌地图获取用户的当前位置,但我得到了一个异常作为回报,我似乎无法理解为什么会发生这种情况。该应用程序很简单 - 获取用户的当前位置,然后将相机缩放到该位置。就是这样。
我将附上我的代码和异常消息。奇怪的是,正如您在异常消息中看到的那样,我正确地获取了 LatLng,那么为什么相机没有指向该位置呢?
class Map extends StatefulWidget {
@override
_MapState createState() => _MapState();
}
class _MapState extends State<Map> {
LatLng currentLatLng;
Completer<GoogleMapController> _controller = Completer();
@override
void initState(){
super.initState();
Geolocator.getCurrentPosition().then((currLocation){
setState((){
currentLatLng = new LatLng(currLocation.latitude, currLocation.longitude);
});
});
}
@override
Widget build(BuildContext context) {
print("Current Location --------> " + currentLatLng.latitude.toString() + " " + currentLatLng.longitude.toString());
return MaterialApp(
home: new Scaffold(
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: currentLatLng),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
注意 - 我正在使用 pub.dev 中的“geolocator”和“google_maps_flutter” - 所有最新版本。
这就是异步编程。currentLatLng为 null 直到getCurrentPosition调用它的回调,所以你不能这样做:
initialCameraPosition: CameraPosition(target: currentLatLng)
Run Code Online (Sandbox Code Playgroud)
因为,正如您的错误所示,currentLatLng它是空的。
您的两个选择是:
将地图设置为您定义的默认位置,然后在getCurrentPosition完成时使用地图控制器更新该位置。
当为空时显示加载程序currentLatLng,当它不再为空时,显示您的地图。
这是 2 的示例
return MaterialApp(
home: new Scaffold(
body: currentLatLng == null ? Center(child:CircularProgressIndicator()) : GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: currentLatLng),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
),
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9861 次 |
| 最近记录: |