Как мне вернуть значение местоположения flotter geolocator? (язык программирования: dart)

#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() вашего виджета с отслеживанием состояния. Методы и значения в сборке виджета запускаются каждый раз, когда виджет перестраивается, и это не очень хороший подход.