无法在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

回到顶部