По предложению Abbas.M я решаю свою проблему с помощью виджета FutureBuilder.
Виджет FutureBuilder:
https://www.youtube.com/watch?v=ek8ZPdWj4Qo
Я объявляю переменную _future
Future<Position> _future;
Я вызываю мой асинхронный метод в initState
void initState() {
// TODO: implement initState
super.initState();
_future = getCurrentLocation();
}
Используя виджет FutureBuilder, я решил свою проблему и передаю возвращаемое значение асинхронной функции параметру виджета FutureBuilder.
Это условие, если (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;
}