Как исправить ошибку с flutter_google_places_autocomplete.dart?

Делаю приложение с гугл картами, в котором можно найти место и построить к нему путь на карте. Я хочу показать места и адреса под ним в соответствии с тем, что вводит пользователь. После отображения результатов мне нужно получить его широту и долготу, чтобы отметить их на карте.

Я пытался использовать flutter_google_places: 0.2.3, но функции (GoogleMapsPlaces, Prediction) не были определены. Затем я использовал flutter_google_places_autocomplete: 0.1.3, и все было хорошо. К сожалению, когда я пытаюсь запустить проект, я получаю сообщение об ошибке:

Compiler message: file:///C:/Users/admin/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/flutter_google_places_autocomplete-0.1.3/lib/src/flutter_google_places_autocomplete.dart:337:35: Error: Too many positional arguments: 0 allowed, but 1 found. Try removing the extra positional arguments. _places = new GoogleMapsPlaces(widget.apiKey); ^ file:///C:/Users/admin/AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/google_maps_webservice-0.0.14/lib/src/places.dart:22:3: Context: Found this candidate, but the arguments don't match.
GoogleMapsPlaces({ ^ Compiler failed on C:\Users\admin\AndroidStudioProjects\advertise_me\lib\main.dart

FAILURE: Build failed with an exception.

  • Where: Script 'C:\Users\admin\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 647

  • What went wrong: Execution failed for task ':app:compileflutterBuildDebugandroid-arm64'.

    Process 'command 'C:\Users\admin\flutter\bin\flutter.bat'' finished with non-zero exit value 1

  • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 9s Finished with error: Gradle task assembleDebug failed with exit code 1

Мой pubspes.yaml:

dependencies: flutter: sdk: flutter

cupertino_icons: ^0.1.2 url_launcher: ^4.2.0+1
google_maps_flutter: bottom_sheet_stateful: ^0.1.1
flutter_google_places_autocomplete: 0.1.3 geocoder: 0.1.2
google_maps_webservice: 0.0.14

Мой код:

import 'package:flutter/material.dart';
import 'package:advertise_me/login_screen.dart';
import 'dart:async';
import 'package:google_maps_webservice/geocoding.dart';
//import 'package:flutter_google_places/flutter_google_places.dart';
import 'package:flutter_google_places_autocomplete/flutter_google_places_autocomplete.dart';
import 'package:geocoder/geocoder.dart';


void main() => runApp(MyApp());

const kGoogleApiKey = "My key";


GoogleMapsPlaces _places = GoogleMapsPlaces(apiKey: kGoogleApiKey);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: demo(),
      ),
    );
  }
}

class demo extends StatefulWidget {
  @override
  demoState createState() => new demoState();
}

class demoState extends State<demo> {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
        body: Container(
            alignment: Alignment.center,
            child: RaisedButton(
              onPressed: () async {
                Prediction p = await showGooglePlacesAutocomplete(
                    context: context, apiKey: kGoogleApiKey);
                displayPrediction(p);
              },
              child: Text('Find address'),

            )
        )
    );
  }

  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);
    }
  }
}

Как исправить эту ошибку? Любая помощь горячо приветствуется.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
5 101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

flutter_google_places_autocomplete устарел, вместо него следует использовать flutter_google_places. См. документацию: https://pub.dev/packages/flutter_google_places_autocomplete

И как только вы используете flutter_google_places, используйте

Prediction p = await PlacesAutoComplete.show() вместо showGooglePlacesAutoComplete()

======= обновленный ответ =====

import 'package:flutter/material.dart';
//import 'package:advertise_me/login_screen.dart';
import 'dart:async';
import 'package:flutter_google_places/flutter_google_places.dart';
import 'package:geocoder/geocoder.dart';
import 'package:google_maps_webservice/places.dart';


void main() => runApp(MyApp());

const kGoogleApiKey = "My key";


GoogleMapsPlaces _places = GoogleMapsPlaces(apiKey: kGoogleApiKey);

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: demo(),
      ),
    );
  }
}

class demo extends StatefulWidget {
  @override
  demoState createState() => new demoState();
}

class demoState extends State<demo> {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
        body: Container(
            alignment: Alignment.center,
            child: RaisedButton(
              onPressed: () async {
                Prediction p = await PlacesAutocomplete.show(
                    context: context, apiKey: kGoogleApiKey);
                displayPrediction(p);
              },
              child: Text('Find address'),

            )
        )
    );
  }

  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);
    }
  }
}

Спасибо за ответ. Я очень невнимателен. Однако после импорта flutter_google_places: 0.2.3 возникли ошибки (неопределенный класс «GoogleMapsPlaces». Функция «GoogleMapsPlaces» не определена. Неопределенный класс «Прогноз». Неопределенный класс «Прогноз». Неопределенный класс «PlacesDetailsResponse».). Можете ли вы помочь мне с этими проблемами или я должен задать это в другом вопросе?

Vlados 03.07.2019 19:49

Это потому, что в вашем коде отсутствовал правильный импорт. Чтобы использовать GoogleMapsPlaces, Prediction и PlacesDetailsResponse, вам необходимо импортировать package:google_maps_webservice/places.dart. Я обновил свой ответ рабочим кодом. Это должно решить проблемы, с которыми вы сталкиваетесь.

Darshan 04.07.2019 06:51

Спасибо, я понял, что мне нужно импортировать: google_maps_webservice/places. Не могли бы вы сказать мне, почему необработанное исключение: NoSuchMethodError: геттер «геометрия» был вызван при нулевом значении. Я думаю, что это Prediction p = null, но почему это происходит? Я выбрал место или я что-то не так делаю? Если это правда, как я могу получить местоположение места, на которое нажал пользователь?

Vlados 04.07.2019 12:22

Это может быть связано с тем, что API Google настроен для вашего проекта. Проверьте, включен ли он и работает ли он должным образом в отношении ключа API. См. сообщение об этой проблеме с плагином: github.com/fluttercommunity/flutter_google_places/issues/51.

Darshan 04.07.2019 13:07

Кроме того, я думаю, что ваша первоначальная проблема была решена, для которой вы сначала разместили свой вопрос. Если это так, вы можете принять мой ответ, чтобы другие тоже знали :-)

Darshan 04.07.2019 13:10

@Darshan Не могли бы вы сказать мне, какая служба в облаке Google должна быть включена, чтобы API службы GoogleMapsPlace получал остальные ответы API?

Cassio Seffrin 01.06.2021 15:28

используйте импорт 'package:google_maps_webservice/places.dart'; вместе с импортом 'package:flutter_google_places/flutter_google_places.dart';

Используйте полный список параметров функции, например:

Prediction p = await PlacesAutocomplete.show( offset: 0, radius: 1000, types: [], strictbounds: false,
region: "ar", context: context, apiKey: googleAPIKey, mode: Mode.overlay, language: "es", components: [Component(Component.country, "ar")] );

Другие вопросы по теме