【问题标题】:How to fix error with flutter_google_places_autocomplete.dart?如何修复 flutter_google_places_autocomplete.dart 的错误?
【发布时间】:2019-11-13 11:45:27
【问题描述】:

我用谷歌地图制作了一个应用程序,您可以在其中找到一个地方并在地图上建立一条通往它的路径。我想根据用户键入的内容在其下方显示地点和地址。显示结果后,我需要获取其经纬度以在地图上标记。

我尝试使用flutter_google_places: 0.2.3,但未定义函数(GoogleMapsPlaces、Prediction)。接下来我使用了flutter_google_places_autocomplete: 0.1.3,一切都很好。不幸的是,当我尝试运行该项目时出现错误:

编译器消息: 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: 错误:位置参数太多:允许 0 个,但找到了 1 个。尝试 删除额外的位置参数。 _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: 上下文:找到了这个候选人,但参数不匹配。
GoogleMapsPlaces({ ^ 编译器失败 C:\Users\admin\AndroidStudioProjects\advertise_me\lib\main.dart

FAILURE:构建失败并出现异常。

  • 其中:脚本 'C:\Users\admin\flutter\packages\flutter_tools\gradle\flutter.gradle' 行:647

  • 出了什么问题:任务 ':app:compileflutterBuildDebugandroid-arm64' 执行失败。

    Process 'command 'C:\Users\admin\flutter\bin\flutter.bat'' 以非零退出值 1 结束

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 通过https://help.gradle.org获得更多帮助

BUILD FAILED in 9s Finished with error: Gradle task assembleDebug 退出代码 1 失败

我的 pubspes.yaml:

依赖关系:颤动: sdk:颤动

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 地理编码器: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);
    }
  }
}

我该如何解决这个错误? 非常感谢任何帮助。

【问题讨论】:

    标签: google-maps flutter dart googleplacesautocomplete


    【解决方案1】:

    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”。)。你能帮我解决这些问题吗?或者我应该在另一个问题中问这个吗?
    • 那是因为您的代码缺少正确的导入。为了使用GoogleMapsPlacesPredictionPlacesDetailsResponse,您需要导入package:google_maps_webservice/places.dart。我用工作代码更新了我的答案。这应该可以解决您面临的问题。
    • 谢谢,我意识到我必须导入:google_maps_webservice/places。你能告诉我为什么 Unhandled Exception: NoSuchMethodError: The getter 'geometry' was called on null。我认为这是预测 p = null,但为什么会发生这种情况?我选择了这个地方还是我做错了什么?如果是真的,我怎样才能得到用户点击的位置?
    • 可能是由于为您的项目配置了 google api。检查该功能是否已启用并按照 api 密钥的预期工作。请参阅针对插件发布的此问题:github.com/fluttercommunity/flutter_google_places/issues/51
    • 另外,我认为您最初发布问题的原始问题已经解决。如果是这样,您可以接受我的回答让其他人也知道:-)
    【解决方案2】:

    使用 import 'package:google_maps_webservice/places.dart'; 和 import 'package:flutter_google_places/flutter_google_places.dart';

    【讨论】:

      【解决方案3】:

      使用完整的函数参数列表,例如:

      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")] );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-04
        • 2016-11-17
        • 2011-07-24
        • 2021-05-10
        • 2017-07-17
        • 2013-03-05
        • 2016-09-10
        • 2020-12-11
        相关资源
        最近更新 更多