У меня проблема с отображением асинхронных данных в текстовом виджете.
Я выполняю два цепных асинхронных метода для поиска координат, а затем поиска города со смартфона:
Future<String> _getCity() async {
Future<Position> pos = Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
String city = "";
pos.then((result) {
return result;
})
.then((result) async {
List<Placemark> listPlacemark = await Geolocator().placemarkFromPosition(result);
return listPlacemark;
})
.then((result) {
return result.first;
})
.then((result) {
city = result.subAdministrativeArea;
// print( city ); -> Here it's showing correct data in console
});
return city;
}
Город отображается на консоли в этой закомментированной команде печати.
Чтобы заполнить текстовый виджет, я делаю это:
Padding(
padding: EdgeInsets.all(12),
child: FutureBuilder<String>(
future: _getCity(), // a Future<String> or null
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Error loading location');
case ConnectionState.waiting:
return Text('Waiting...');
default:
if (snapshot.hasError) {
return Text('Error loading location');
} else {
return Text(snapshot.data);
}
}
},
),
),
Я вызвал метод _getCity внутри метода initState, и это тоже сработало. Сообщение ожидания уже появилось, но теперь все пусто, чего не хватает?
Благодарю за внимание!