Как я могу выбрать значение из мест в PlacesAutocomplete и сохранить его в TextFormField

Я хочу получать места с помощью PlacesAutocomplete и сохранять их в своем TextFormField.
Я звоню displayPrediction() из TextFormFeild()

TextFormField(
                    decoration: textInputDecoration.copyWith(hintText: 'From'),
                    onTap: () async {
                      Prediction p = await PlacesAutocomplete.show( 
                        context: context,
                        apiKey: kGoogleApiKey,
                        mode: Mode.overlay,
                        //language: "en",
                        //components: [Component (Component.country, "en")],
                        );
                      displayPrediction(p);
                    },
                  ),

Вот displayPrediction():

Future<Null> displayPrediction(Prediction p) async {
    if (p != null) {
      PlacesDetailsResponse detail =
      await _places.getDetailsByPlaceId(p.placeId);

      var placeId = p.placeId;
      double lat = detail.result.geometry.location.lat;
      double lng = detail.result.geometry.location.lng;

      var address = await Geocoder.local.findAddressesFromQuery(p.description);

      print(lat);
      print(lng);
      print(address);
    }
  }

Переменные kGoogleApiKey и _places

const kGoogleApiKey = "My_API_Key";

GoogleMapsPlaces _places = GoogleMapsPlaces(apiKey: kGoogleApiKey);

Я хочу получить это место после нажатия на мое поле TextFormField и отобразить то же место в том же поле TextFormField введите описание изображения здесь

И я получаю эту ошибку после выбора места - _TypeError (тип List ‹dynamic› не является подтипом типа PlaceDetails)


person Himanshu Sharma    schedule 25.12.2019    source источник


Ответы (1)


вот демо

final TextEditingController _controller = TextEditingController();

TextFormField(      controller: _controller ,
                    decoration: textInputDecoration.copyWith(hintText: 'From'),
                    onTap: () async {
                      Prediction p = await PlacesAutocomplete.show( 
                        context: context,
                        apiKey: kGoogleApiKey,
                        mode: Mode.overlay,
                        //language: "en",
                        //components: [Component (Component.country, "en")],
                        );
                      displayPrediction(p);
                    },
                  ),

похоже, вы используете библиотеку геокодера

Future<Null> displayPrediction(Prediction p) async {
    if (p != null) {
      PlacesDetailsResponse detail =
      await _places.getDetailsByPlaceId(p.placeId);

      var placeId = p.placeId;
      double lat = detail.result.geometry.location.lat;
      double lng = detail.result.geometry.location.lng;

      var address = await Geocoder.local.findAddressesFromQuery(p.description);
      setState(() {
         _controller.text = address.first.featureName;
      });

      print(lat);
      print(lng);
      print(address);
    }
  }

Надеюсь, это поможет

person Jaydeep chatrola    schedule 26.12.2019
comment
Спасибо, он отлично работает для «От», но он отображает то же место в «Кому», и если я выберу «Кому» TextFormFeild, чтобы изменить место, отображается ошибка: _TypeError (тип «List ‹dynamic›» не является подтип типа PlaceDetails) - person Himanshu Sharma; 26.12.2019
comment
используйте другой final TextEditingController _controller = TextEditingController(); для поля 'TO' - person Jaydeep chatrola; 26.12.2019
comment
Я создал разные displayPrediction и _controller, но даже после этого 'TO' показывает ошибку - person Himanshu Sharma; 26.12.2019
comment
Это проблема с приведением типов, перепроверьте тип данных вашей переменной - person Jaydeep chatrola; 26.12.2019
comment
ожидание _places.getDetailsByPlaceId (p.placeId); - person Himanshu Sharma; 26.12.2019
comment
Ошибка возникает между _places**.**getDetailsByPlaceId... - person Himanshu Sharma; 26.12.2019
comment
что такое тип _places ?? - person Jaydeep chatrola; 26.12.2019
comment
GoogleMapsPlaces _places = GoogleMapsPlaces (apiKey: kGoogleApiKey); - person Himanshu Sharma; 26.12.2019
comment
какую библиотеку вы используете flutter_google_places 0.2.3 или flutter_google_places_autocomplete 0.1.3 ?? - person Jaydeep chatrola; 26.12.2019
comment
проверьте тип возврата этого метода _places.getDetailsByPlaceId(p.placeId); - person Jaydeep chatrola; 26.12.2019
comment
Я не знаю, но он показывает ошибку, проверьте это: stackoverflow.com/questions/59475091/ - person Himanshu Sharma; 26.12.2019
comment
дайте мне знать, когда найдете решение :) - person Jaydeep chatrola; 26.12.2019