#flutter #dart
#flutter #dart
Вопрос:
Я создаю приложение с использованием flutter.
Я пытаюсь сохранить значение позиции в переменной, используя библиотеку geolocator, но я не могу распечатать значение из-за ошибки ниже.
Пожалуйста, посмотрите на приведенный ниже код и скажите мне, как сохранить возвращаемое значение местоположения в переменной. Спасибо.
/* Convert to location using Geolocator */
Future<Position> _getLocation() async {
return Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.low)
.then((location) {
return location;
});
}
/* run app */
@override
Widget build(BuildContext context) {
_getUser();
print(_getLocation());
- omit below -
/* =============================== */
/* Output value when the app runs */
/* Instance of 'Future<Position>' */
/* =============================== */
Комментарии:
1. Добро пожаловать в StackOverflow! Вы пытаетесь напечатать обещание, но не положение. Вы пробовали
print(await _getLocation());
?
Ответ №1:
Future<Position> _getLocation() async {
return await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
}
Position userPosition = await _getLocation();
print(userPosition);
Комментарии:
1. Если я вставлю await в класс сборки виджета, появится ошибка с красным подчеркиванием.
2. ЖУРНАЛ ОШИБОК: Выражение await может использоваться только в асинхронной функции.
3. Вы не должны использовать их в своем классе виджетов. Определите переменную userPosition в классе state и вызовите _getLocation() в методе initState() вашего виджета с отслеживанием состояния. Методы и значения в сборке виджета запускаются каждый раз, когда виджет перестраивается, и это не очень хороший подход.