我正在尝试显示当前位置的地图。为此,我使用了Location和Google Map插件(最新版本)。
我有类似的代码:
var lng, lat;
@override
initState() {
super.initState();
loading = true;
getLocation();
}
Future getLocation() async {
final location = Location();
var currentLocation = await location.getLocation();
setState(() {
lat = currentLocation.latitude;
lng = currentLocation.longitude;
loading=false;
});
}
loading==false ? GoogleMap(
mapType: MapType.hybrid,
myLocationButtonEnabled: true,
myLocationEnabled: true,
initialCameraPosition: CameraPosition(
target: LatLng(lat, lng),
zoom: 15.0,
)):null,
当我们进入带有地图的视图时,在控制台中出现此错误的时间约为1秒(然后正确加载视图)
I / flutter(15567):W小组件库引起的异常提示 ╞═════════════════════════════════════════════════ ══════════我/扑 (15567):以下断言被抛出 HomePageScreen(脏,依赖项:I / flutter(15567): [_LocalizationsScope- [GlobalKey#78c30],MediaQuery)状态: _HomePageScreen#9c9d2):I / flutter(15567):“ package:google_maps_flutter / src / location.dart”:失败的断言: 第17行pos 16:'latitude!= I / flutter(15567):null':不正确。
我对其进行调试,错误相对简单: Location 插件加载纬度和经度较慢, Google Maps 插件加载速度更快。所以我们有一个错误。
问题是:如何强制Google地图通过“位置”插件等待位置和经度?
答案 0 :(得分:0)
您可以显示装载机,直到找到您的位置为止,
var lng, lat;
@override
initState() {
super.initState();
loading = true;
getLocation();
}
Future getLocation() async {
final location = Location();
var currentLocation = await location.getLocation();
setState(() {
lat = currentLocation.latitude;
lng = currentLocation.longitude;
loading=false;
});
}
loading==false ? GoogleMap(
mapType: MapType.hybrid,
myLocationButtonEnabled: true,
myLocationEnabled: true,
initialCameraPosition: CameraPosition(
target: LatLng(lat, lng),
zoom: 15.0,
)):CircularProgressIndicator(),
答案 1 :(得分:0)
在Container()
和lat
为空的情况下显示空的lng
或任何加载指示器。
lat == null || lng == null
? Container()
: GoogleMap(
mapType: MapType.hybrid,
myLocationButtonEnabled: true,
myLocationEnabled: true,
initialCameraPosition: CameraPosition(
target: LatLng(lat, lng),
zoom: 15.0,
),
);
答案 2 :(得分:0)
您也可以尝试使用此方法,并摆脱空的Container
。
GoogleMap(
mapType: MapType.hybrid,
myLocationButtonEnabled: true,
myLocationEnabled: true,
initialCameraPosition: CameraPosition(
target: LatLng(lat ?? 0, lng ?? 0), // so if lat, lng is null, we use 0 as placeholder.
zoom: 15.0,
),
)