Flutter 断言失败:第19行第16位:';纬度!=空';:事实并非如此。颤振误差
我使用flutter和谷歌地图 地理定位用于显示用户的当前位置 地图加载正确,但在加载之前,它会显示此错误 “package:google\u maps\u flatter\u platform\u interface/src/types/location.dart”:失败的断言:第19行位置16:“纬度!”null”:不正确 这是我的init代码的一部分,用于获取当前位置Flutter 断言失败:第19行第16位:';纬度!=空';:事实并非如此。颤振误差,flutter,google-maps,dart,google-maps-android-api-3,Flutter,Google Maps,Dart,Google Maps Android Api 3,我使用flutter和谷歌地图 地理定位用于显示用户的当前位置 地图加载正确,但在加载之前,它会显示此错误 “package:google\u maps\u flatter\u platform\u interface/src/types/location.dart”:失败的断言:第19行位置16:“纬度!”null”:不正确 这是我的init代码的一部分,用于获取当前位置 var lat; var long; @override void initState() {
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,
),
],
);
}
}
var-lat;
var long;
@凌驾
void initState(){
_child=spinkit(
itemBuilder:(构建上下文,int索引){
返回装饰盒(
装饰:盒子装饰(
颜色:index.isEven?Colors.灰色:颜色(0xffffb838),
),
);
},
);
getCurrentLocation();
populateClients();
setCustomMapPin();
super.initState();
}
void getCurrentLocation()异步{
地点许可;
权限=等待地理定位器。检查权限();
if(permission==LocationPermission.deniedForever){
纬度=6.9271;长=79.8612;
}
else if(权限==LocationPermission.denied){
权限=等待地理定位器。requestPermission();
if(permission!=LocationPermission.whileiuse&&
权限!=位置权限。始终){
纬度=6.9271;长=79.8612;
}
}
否则{
Position res=等待地理定位器。getCurrentPosition(期望精度:LocationAccuracy.high);//getCurrentPosition();
纬度=分辨率纬度;经度=分辨率经度;
}
设置状态(){
//位置=分辨率;
//纬度=6.9271;长=79.8612;
_child=mapWidget();
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
iconTheme:IconThemeData(颜色:Colors.white),
标题:文本(“地图”),
标题:对,
背景颜色:Colors.blue,
),
正文:mapWidget(),
);
}
Widget mapWidget(){
返回堆栈(
儿童:[
谷歌地图(
initialCameraPosition:CameraPosition(
目标:纬度(纬度,经度),/(位置.纬度,位置.经度),
缩放:18,
),
///mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)异步{
_控制器=控制器;
等待setMapStyle(控制器、上下文);
},
标记:一组(标记值),
同谋:是的,
myLocationEnabled:对,
),
大小盒子(
身高:26,
),
],
);
}
}
**我想显示一个动画,直到地图被正确加载**无论何时渲染UI,这取决于等待另一个操作完成,您必须使用FutureBuilder小部件 为了完成您想要做的事情,您必须使用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,
),
],
);
});
}
}
未来重新加载当前位置;
@凌驾
void initState(){
super.initState();
reloadCurrentLocation=getCurrentLocation();
}
Future getCurrentLocation()异步{
地点许可;
权限=等待地理定位器。检查权限();
if(permission==LocationPermission.deniedForever){
纬度=40.7128;长=74.0060;
}
else if(权限==LocationPermission.denied){
权限=等待地理定位器。requestPermission();
if(permission!=LocationPermission.whileiuse&&
权限!=位置权限。始终){
纬度=40.7128;长=74.0060;
}
}
否则{
Position res=等待地理定位器。getCurrentPosition(期望精度:
LocationAccurance.high);//getCurrentPosition();
纬度=相对纬度;
长=经度;
}
populateClients();
setCustomMapPin();
返回_child=mapWidget();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
iconTheme:IconThemeData(颜色:Colors.white),
标题:文本(“地图”),
标题:对,
背景颜色:Colors.blue,
),
正文:mapWidget(),
);
}
Widget mapWidget(){
回归未来建设者(
未来:重新加载当前位置,
生成器:(上下文、状态){
如果(state.connectionState==connectionState.active||
state.connectionState==connectionState.waiting){
回程自旋波(
itemBuilder:(构建上下文,int索引){
返回装饰盒(
装饰:盒子装饰(
颜色:index.isEven?颜色。灰色:
颜色(0xffffb838),
),
);
},
);
}否则{
返回堆栈(
儿童:[
谷歌地图(
initialCameraPosition:CameraPosition(
目标:
纬度(纬度,长),/(位置纬度,
位置(经度),
缩放:18,
),
///mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)
控制器)异步{
_控制器=控制器;
等待setMapStyle(控制器、上下文);
},
标记:一组(标记值),