flutter_google_places не показывает результаты поиска с автозаполнением

Я следую руководству по следующей ссылке по использованию API Карт Google для создания функции поиска для поиска мест на карте:

Учебник по флаттеру на Medium.com

Ниже приведен код, который, как мне кажется, составляет суть проблемы:

 /**
* Retrieves the user's location
* NOTE: This pretty much does the same thing as _animateToUser,
* but I separated the two
*/
Future<LatLng> getUserLocation() async {
 var currentLocation = <String, double>{};
 final uLocation = LocationManager.Location();
try {
  currentLocation = await uLocation.getLocation();
  final lat = currentLocation["latitude"];
  final lng = currentLocation["longitude"];
  final center = LatLng(lat, lng);
  return center;
} on Exception {
  currentLocation = null;
  return null;
}
}

/**
 * Searches for locations using Google Maps API
*/
Future<void> _search() async {
try {
  final center = await getUserLocation();
  Prediction p = await PlacesAutocomplete.show(
      context: context,
      strictbounds: center == null ? false : true,
      apiKey: kGoogleApiKey,
      onError: onError,
      mode: Mode.overlay,
      language: "en",
      location: center == null
          ? null
          : Location(center.latitude, center.longitude),
      radius: center == null ? null : 10000);

  showDetailPlace(p.placeId);
} catch (e) {
  return;
}
}

/**
* Shows details of a place
*/
Future<Null> showDetailPlace(String placeId) async {
if (placeId != null) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => 
    PlaceDetailWidget(placeId)),
  );
 }
 } /**
 * Retrieves the user's location
 * NOTE: This pretty much does the same thing as _animateToUser,
 * but I separated the two
 */
Future<LatLng> getUserLocation() async {
var currentLocation = <String, double>{};
final uLocation = LocationManager.Location();
try {
  currentLocation = await uLocation.getLocation();
  final lat = currentLocation["latitude"];
  final lng = currentLocation["longitude"];
  final center = LatLng(lat, lng);
  return center;
} on Exception {
  currentLocation = null;
  return null;
}
}`

Проблема в том, что независимо от того, что я набираю в строку поиска, она не будет автоматически заполнять / предлагать что-либо.

Пример:  введите здесь описание изображения

В этом примере я хочу вывести список мест, в которых есть слово grand, например, Grand Central Station.


person evanhaus    schedule 03.06.2019    source источник
comment
Пожалуйста, проверьте журнал, я думаю, он показывает ошибку, связанную с Google API.   -  person Farhana Naaz Ansari    schedule 04.06.2019


Ответы (3)


Я понял. Функция _search() имеет радиус radius: center == null ? null : 10000);, который она использует для вычисления областей вокруг вас в пределах заданного вами радиуса. В моем эмуляторе мое местоположение находится в центре Атлантического океана (отдельная проблема, но очень незначительная). Поскольку рядом с моим местоположением посреди океана не было мест, которые начинались бы со слова «grand», ничего не происходило. Я увеличил радиус с 10000 до 10000000, и он начал находить места.

person evanhaus    schedule 04.06.2019
comment
Также эмулятор думал, что я нахожусь в Атлантическом океане, было моей собственной ошибкой. Открыв эмулятор, я перешел в Отладка - ›Местоположение -› Пользовательское местоположение ... и понял, что неправильно ввел широту и долготу в соответствующие поля. Как только я его поменял и перезагрузил, я оказался там, где хотел. - person evanhaus; 04.06.2019

Проверьте, активирован ли ваш биллинг в Google APIS.

person Gabriel Almeida    schedule 23.10.2020

Поищите в консоли ошибки. В моем случае мой биллинг был привязан, и соответствующие API-интерфейсы были включены, но прогнозы не отображаются. Затем я добавил следующие strictBounds и типы как ненулевые значения.

Prediction p = await PlacesAutocomplete.show(
                  context: context,
                  apiKey: Local.googleMapsAPIKey,
                  radius: 10000000,
                  types: [],
                  strictbounds: false,
                  mode: Mode.overlay,
                  language: "fr",
                  decoration: InputDecoration(
                    hintText: 'Search',
                    focusedBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(20),
                      borderSide: BorderSide(
                        color: Colors.white,
                      ),
                    ),
                  ),
                  components: [Component(Component.country, "fr")],
                );
person hellobear    schedule 08.04.2021
comment
types: [], strictbounds: false, Две приведенные выше строки решили мои проблемы. Раньше он бросал: оператор нулевой проверки, используемый для нулевого значения - person Vignesh Bala; 22.04.2021
comment
Рад был помочь :) - person hellobear; 24.04.2021