错误:找不到类型“ Geolocator”,并且“地标”不是类型

问题描述

我收到此错误:Type 'Geolocator' not found'Placemark' isn't a type。每当我尝试执行flutter run时,都会出现此错误:

lib/screens/register.dart:33:9: Error: Type 'Geolocator' not found.     
  final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
        ^^^^^^^^^^
lib/screens/profile_edit.dart:33:9: Error: Type 'Geolocator' not found.   
  final Geolocator _geolocator = Geolocator()..forceAndroidLocationManager;
        ^^^^^^^^^^
lib/screens/register.dart:33:9: Error: 'Geolocator' isn't a type.       
  final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
        ^^^^^^^^^^
lib/screens/register.dart:33:33: Error: Method not found: 'Geolocator'.   
  final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
                                ^^^^^^^^^^                              
lib/screens/register.dart:108:12: Error: 'Placemark' isn't a type.
      List<Placemark> p = await geolocator.placemarkFromCoordinates(
           ^^^^^^^^^
lib/screens/register.dart:111:7: Error: 'Placemark' isn't a type.       
      Placemark place = p[0];
      ^^^^^^^^^
lib/screens/profile_edit.dart:33:9: Error: 'Geolocator' isn't a type.   
  final Geolocator _geolocator = Geolocator()..forceAndroidLocationManager;
        ^^^^^^^^^^
lib/screens/profile_edit.dart:33:34: Error: Method not found: 'Geolocator'.
  final Geolocator _geolocator = Geolocator()..forceAndroidLocationManager;
                                 ^^^^^^^^^^
lib/screens/profile_edit.dart:70:12: Error: 'Placemark' isn't a type.
      List<Placemark> p = await _geolocator.placemarkFromCoordinates(
           ^^^^^^^^^
lib/screens/profile_edit.dart:73:7: Error: 'Placemark' isn't a type.    
      Placemark place = p[0];
      ^^^^^^^^^
                                                                        

FAILURE: Build failed with an exception.

* Where:
Script 'C:\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 896

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command 'C:\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 24s
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done                        25.3s
Exception: Gradle task assembleDebug failed with exit code 1

为什么我遇到这个问题,我仍然在解决。

它是如何开始的?

在我进行flutter upgrade之前。在处理我的电力的过程中,由于这个原因,这个过程被中断了,颤动被破坏了。

那我做了什么?

我重新安装了Flutter,然后进行了一些更改。这些吗?

  1. 清除pubspec.lock文件
  2. 运行平稳干净
  3. 扑扑奔跑

它以某种方式消除了我的软件包问题,但在运行时仍然出现错误。然后我做到了

flutter upgrade --force // which gave me that I am on stable and upgraded
flutter pub cache repair // which downloaded the packages again,except few failures which I ignored,not related to geolocator
flutter clean
flutter run

再次遇到我上面提到的相同错误。

现在,我所规定的是,存在某种软件包过时的问题,但是我已经在使用最新的软件包geolocator 6.0.0+1

向我显示flutter doctor -vflutter doctor

你在这里

[√] Flutter (Channel stable,1.20.3,on Microsoft Windows [Version 10.0.18363.1016],locale en-US)
    • Flutter version 1.20.3 at C:\flutter
    • Framework revision 216dee60c0 (2 days ago),2020-09-01 12:24:47 -0700
    • Engine revision d1bc06f032
    • Dart version 2.9.2


[√] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at C:\Users\ALOKKU~1\AppData\Local\Android\Sdk
    • Platform android-29,build-tools 29.0.2
    • ANDROID_HOME = C:\Users\ALOKKU~1\AppData\Local\Android\Sdk
    • ANDROID_SDK_ROOT = C:\Users\ALOKKU~1\AppData\Local\Android\Sdk
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)       
    • All Android licenses accepted.

[√] Android Studio (version 3.6)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 44.0.2
    • Dart plugin version 192.7761
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)       

[√] VS Code (version 1.48.2)
    • VS Code at C:\Users\ALOK KUMAR\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.13.2

[√] Connected device (1 available)
    • ONEPLUS A6010 (mobile) • 4ee3072b • android-arm64 • Android 10 (API 29)

• No issues found!

我该如何解决呢?

解决方法

这确实是软件包Geolocator()中弃用的geolocator的问题。现在,使用新的Flutter版本1.20.3geolocator 6.0.0+1,您需要使用软件包geocoder 0.2.1来获取地址。

以下代码已被完全弃用,完全不受支持:

    // for getting the position
    final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
    geolocator
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
        .then((Position position) {
      setState(() {
        _currentPosition = position;
      });
    }).catchError((e) {
      print(e);
    });

    
    // for getting location address
    List<Placemark> p = await geolocator.placemarkFromCoordinates(
          _currentPosition.latitude,_currentPosition.longitude);

      Placemark place = p[0];

      setState(() {
        _currentAddress =
            "${place.locality},${place.postalCode},${place.country}";
      });   

要获取地址,您现在可以同时阅读geolocatorgeocoder文档。无论如何,我通过我的代码指出了这一点:

算法:

  1. 您从Geolocator获得职位
  2. 您只能从forceAndroidLocationManager: true开始Geolocator Position
  3. 您从Geocoder包裹中获取地址

代码:

// you can play with the accuracy as per your need. best,high,low etc
// by default forceAndroidLocationManager is false
Position position = await getCurrentPosition(desiredAccuracy: LocationAccuracy.high,forceAndroidLocationManager: true).catchError((err) => print(err));

// this will get the coordinates from the lat-long using Geocoder Coordinates
final coordinates = Coordinates(position.latitude,position.longitude);

// this fetches multiple address,but you need to get the first address by doing the following two codes
var addresses = await Geocoder.local.findAddressesFromCoordinates(coordinates);
var first = addresses.first;
print(place.countryName); // your country name will come. You can play with it to find out more

这就是您修复不推荐使用的Geolocator代码的方法。

,

我认为您的问题是由于from Geolocator version 6.0.0rc.1他们将地址解析分离到了另一个插件造成的。 如果将Geolocator和Geocoding一起导入,则可以使用“ placemarkFromCoordinates”和Placemark,这样您的代码即可正常工作。 我添加了一个代码示例:

import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
...
//  Future builder with GoogleMap widget or whatever...
...


// Method to get current position:

Future<void> _getCurrentPosition() async {
// verify permissions
LocationPermission permission = await checkPermission();
if (permission == LocationPermission.denied ||
    permission == LocationPermission.deniedForever) {
  permission = await requestPermission();
}
// get current position
 _currentPosition =
    await getCurrentPosition(desiredAccuracy: LocationAccuracy.high);

 // get address
 String _currentAddress = await _getGeolocationAddress(_currentPosition);
}


// Method to get Address from position:

Future<String> _getGeolocationAddress(Position position) async {
 // geocoding
 var places = await placemarkFromCoordinates(
   position.latitude,position.longitude,);
 if (places != null && places.isNotEmpty) {
   final Placemark place = places.first;
   return "${place.thoroughfare},${place.locality}";
 }
 return "No address availabe";
}
,

只需对先前的答案进行一些修正

pubspec.yaml与

geolocator: ^6.1.5
  geocoding: 1.0.5

这在代码上

import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';

Future<void> _getCurrentPosition() async {
    // verify permissions
    LocationPermission permission = await Geolocator.requestPermission();
    if (permission == LocationPermission.denied ||
        permission == LocationPermission.deniedForever) {
      await Geolocator.openAppSettings();
      await Geolocator.openLocationSettings();
    }
    // get current position
    _currentPosition = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);

    // get address
    String _currentAddress = await _getGeolocationAddress(_currentPosition);
  }

  // Method to get Address from position:

  Future<String> _getGeolocationAddress(Position position) async {
    // geocoding
    var places = await placemarkFromCoordinates(
      position.latitude,);
    if (places != null && places.isNotEmpty) {
      final Placemark place = places.first;
      return "${place.thoroughfare},${place.locality}";
    }

    return "No address available";
  }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...