无法在Flutter应用程序中加载当前位置
我正在使用geolocator插件并获取当前的纬度和经度,但无法在Flutter应用程序的初始状态下加载它。显示渲染错误。
void initState() {// TODO: implement initState
super.initState();
getCurrentLocation();
}
void getCurrentLocation() async {
var answer = await Geolocator().getCurrentPosition();
setState(() {
latitude = answer.latitude;
longitude = answer.longitude;
});
}
几毫秒后,地图会使用当前位置更新,但显示这些错误。I / flutter(14143):W小工具库引起的异常CA
═════════════════════════
I / flutter(14143):构建HomePage(脏,状态:_HomePageState#d55de)时引发了以下断言:
I / flutter(14143):“ package:google_maps_flutter / src /
location.dart”:断言失败:第17行pos 16:“ latitude!=
I / flutter(14143):null’:不正确。
I /颤振(14143):
I / flutter(14143):要么断言表明框架本身存在错误,要么我们应该提供
I / flutter(14143):此错误消息中的更多信息可帮助您确定和解决根本原因。
I / flutter(14143):无论哪种情况,请通过在GitHub上提交错误来报告此断言:
回答:
作为Abbas.M的建议,我正在使用FutureBuilder Widget解决我的问题。
FutureBuilder窗口小部件:https://www.youtube.com/watch?v
= ek8ZPdWj4Qo
我在声明_future变量
Future<Position> _future;
我在initState中调用异步方法
void initState() {// TODO: implement initState
super.initState();
_future = getCurrentLocation();
}
使用FutureBuilder小部件,我解决了我的问题,并将异步函数返回值传递给FutureBuilder小部件的参数。
此条件if(snapshot.connectionState ==
ConnectionState.done)有助于查找异步函数是否已完成并返回值。如果处于完成状态,则表示函数已完成并返回。
如果不满足该条件,则意味着异步功能未完成,因此我正在使用CircularProgressIndicator小部件来通知用户了解应用程序正在加载。
Widget build(BuildContext context) {return Scaffold(
appBar: AppBar(
title: Text("Flutter Krish"),
),
body: FutureBuilder(
future: _future,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (!snapshot.hasError) {
print(snapshot.data.latitude);
return Stack(children: <Widget>[
GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(
snapshot.data.latitude, snapshot.data.longitude),
zoom: 12.0),
onMapCreated: mapCreated,
),
Positioned(
top: 30.0,
left: 15.0,
right: 15.0,
child: Container(
height: 50.0,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.white),
child: TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'Enter Address',
contentPadding:
EdgeInsets.only(top: 15.0, left: 15.0),
suffixIcon: IconButton(
icon: Icon(Icons.search),
onPressed: searchAndNavigate,
iconSize: 30.0,
)),
onChanged: (value) {
searchAddress = value;
},
),
),
),
]);
}
} else {
return Center(child: CircularProgressIndicator());
}
}));
}
Future<Position> getCurrentLocation() async
{
var answer = await Geolocator().getCurrentPosition();
return answer;
}
以上是 无法在Flutter应用程序中加载当前位置 的全部内容, 来源链接: utcz.com/qa/409657.html