flutter - 断言失败:第 19 行第 16 行:'纬度!= null':不正确。颤振错误
问题描述
我使用颤振和谷歌地图
采用地理位置来显示用户的当前位置
地图正确加载,但在加载之前,它显示此错误
'package:google_maps_flutter_platform_interface/src/types/location.dart':断言失败:第 19 行 pos 16:'纬度!= null':不正确。
这是我的 init 代码的一部分并获取当前位置
var lat;
var long;
@override
void initState() {
_child = SpinKitRipple(
itemBuilder: (BuildContext context, int index) {
return DecoratedBox(
decoration: BoxDecoration(
color: index.isEven ? Colors.grey : Color(0xffffb838),
),
);
},
);
getCurrentLocation();
populateClients();
setCustomMapPin();
super.initState();
}
void getCurrentLocation() async {
LocationPermission permission;
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.deniedForever) {
lat=6.9271;long=79.8612;
}
else if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission != LocationPermission.whileInUse &&
permission != LocationPermission.always) {
lat=6.9271;long=79.8612;
}
}
else{
Position res = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high); //getCurrentPosition();
lat=res.latitude;long=res.longitude;
}
setState(() {
//position = res;
//lat=6.9271;long=79.8612;
_child = mapWidget();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(color: Colors.white),
title: Text('Map'),
centerTitle: true,
backgroundColor: Colors.blue,
),
body: mapWidget(),
);
}
Widget mapWidget() {
return Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(lat,long),//(position.latitude, position.longitude),
zoom: 18,
),
///mapType: MapType.normal,
onMapCreated: (GoogleMapController controller) async{
_controller = controller;
await setMapStyle(controller, context);
},
markers: Set<Marker>.of(markers.values),
compassEnabled: true,
myLocationEnabled: true,
),
SizedBox(
height: 26,
),
],
);
}
}
** 我想在地图正确加载之前显示动画**
解决方案
每当您渲染 UI 时,这取决于等待另一个操作完成,您必须使用FutureBuilder小部件。
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
为了做你想做的事,你必须用FutureBuilder包装你当前的小部件。像这样:
Future<Widget> reloadCurrentLocation;
@override
void initState() {
super.initState();
reloadCurrentLocation = getCurrentLocation();
}
Future<Widget> getCurrentLocation() async {
LocationPermission permission;
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.deniedForever) {
lat=40.7128;long=74.0060;
}
else if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission != LocationPermission.whileInUse &&
permission != LocationPermission.always) {
lat=40.7128;long=74.0060;
}
}
else {
Position res = await Geolocator.getCurrentPosition(desiredAccuracy:
LocationAccuracy.high); //getCurrentPosition();
lat=res.latitude;
long=res.longitude;
}
populateClients();
setCustomMapPin();
return _child = mapWidget();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(color: Colors.white),
title: Text('Map'),
centerTitle: true,
backgroundColor: Colors.blue,
),
body: mapWidget(),
);
}
Widget mapWidget() {
return FutureBuilder(
future: reloadCurrentLocation,
builder: (context, state) {
if (state.connectionState == ConnectionState.active ||
state.connectionState == ConnectionState.waiting) {
return SpinKitRipple(
itemBuilder: (BuildContext context, int index) {
return DecoratedBox(
decoration: BoxDecoration(
color: index.isEven ? Colors.grey :
Color(0xffffb838),
),
);
},
);
} else {
return Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition: CameraPosition(
target:
LatLng(lat,long),//(position.latitude,
position.longitude),
zoom: 18,
),
///mapType: MapType.normal,
onMapCreated: (GoogleMapController
controller) async{
_controller = controller;
await setMapStyle(controller, context);
},
markers: Set<Marker>.of(markers.values),
compassEnabled: true,
myLocationEnabled: true,
),
SizedBox(
height: 26,
),
],
);
});
}
}
推荐阅读
- javascript - 变量声明是否提升到 if 范围块的顶部?
- angular - Angular 7 rxjs 6 仅绑定到某些元素
- python - 如何修复错误“您的凭据类不支持会话注入。性能不会达到最大值。” 发送消息时的消息?
- javascript - 动态生成的列表中的匿名函数产生 SyntaxError
- airflow - 气流调度程序没有立即调度简单的 DAG 任务
- arraylist - 在 json 元素数组上使用 Junit 断言在第一个元素上失败
- java - 导航抽屉在点击事件时关闭
- javascript - 如何将两个外部 .js 和两个外部 .css 调用到一个 div?
- .net - Oracle.ManagedDataAccess nuget 包性能
- excel - VBA 代码只是在中间执行中停止而没有完成代码(不是挂起)