如何在颤动中获取用户的位置

Posted

技术标签:

【中文标题】如何在颤动中获取用户的位置【英文标题】:how to get a user's location in flutter 【发布时间】:2021-12-08 01:55:57 【问题描述】:

我想定位用户并通过api将他的位置坐标发送到服务器,请用代码回答,我试过图书馆地理定位器:^7.7.0

void getCurrentLocation() async 
     Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
     var lat = position.latitude;
     var long = position.longitude;
 print("Latitude: $lat and Longitude: $long");
   

此代码不起作用,错误:

[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: MissingPluginException(No implementation found for method getCurrentPosition on channel flutter.baseflow.com/geolocator)
E/flutter (25476): #0      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:156
E/flutter (25476): <asynchronous suspension>
E/flutter (25476): #1      MethodChannelGeolocator.getCurrentPosition (package:geolocator_platform_interface/src/implementations/method_channel_geolocator.dart:128:27)
E/flutter (25476): <asynchronous suspension>
E/flutter (25476): #2      getCurrentLocation
package:check_time/Screens/fingerprint_Screen.dart:84
E/flutter (25476): <asynchronous suspension>

【问题讨论】:

运行颤振医生并在此处添加屏幕 【参考方案1】:

尝试重新启动应用程序!应该从那里开始工作。添加插件时,热重启不起作用。

【讨论】:

不再工作 * 出了什么问题:任务 ':geolocator_android:compileDebugJavaWithJavac' 执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。 * 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 * 在help.gradle.orgBUILD FAILED in 49s 获得更多帮助异常:Gradle 任务 assembleDebug 失败,退出代码为 1 你是否按照安卓的说明进行操作?也试试flutter clean!【参考方案2】:

再次构建应用程序。试试这个代码。

    Future<void> getCurrentLocation() async 
      Position position = await Geolocator.getCurrentPosition(
                           desiredAccuracy:LocationAccuracy.high);
      double lat = position.latitude;
      double long = position.longitude;
      print("Latitude: $lat and Longitude: $long");
  

【讨论】:

不工作 * 出了什么问题:任务 ':geolocator_android:compileDebugJavaWithJavac' 执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。 * 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 * 在 help.gradle.orgBUILD FAILED in 30s 获得更多帮助异常:Gradle 任务 assembleDebug 失败,退出代码为 1 将地理定位器版本更改为 7.6.2 没有工作 * 出了什么问题:任务 ':geolocator_android:compileDebugJavaWithJavac' 执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。 * 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 * 在 help.gradle.orgBUILD FAILED in 10s 获得更多帮助异常:Gradle 任务 assembleDebug 失败,退出代码为 1【参考方案3】:

如果您没有按照所需的应用平台对应用进行更改,通常会出现此错误。

即安卓、ios、Web

转到Usage下的包描述中的package

遵循您正在构建的平台的实施步骤

【讨论】:

【参考方案4】:

试试下面的代码希望它对你有帮助,参考地理定位器here和地理编码here获取纬度和经度以及你的位置名称

为您的当前位置和init() mathod 创建位置和一个变量

Position? _currentPosition;
  String? _currentAddress;
  void initState() 
    super.initState();
    getCurrentLocation();
  

获取经纬度函数

 getCurrentLocation() 
    Geolocator.getCurrentPosition(
            desiredAccuracy: LocationAccuracy.best,
            forceAndroidLocationManager: true)
        .then((Position position) 
      setState(() 
        _currentPosition = position;
         print(position.latitude);
         print(position.longitude);
        _getAddressFromLatLng();
      );
    ).catchError((e) 
      print(e);
    );
  

根据您的纬度和经度定位的功能

_getAddressFromLatLng() async 
    try 
      List<Placemark> placemarks = await placemarkFromCoordinates(
          _currentPosition!.latitude, _currentPosition!.longitude);

      Placemark place = placemarks[0];

      setState(() 
        _currentAddress = "$place.subLocality";//here you can used place.country and other things also
        print(_currentAddress);
      );
     catch (e) 
      print(e);
    
  

您的小部件:

Column(
      children: [
        if (_currentPosition != null && _currentAddress != null)
          Text(
            _currentAddress!,
            style: TextStyle(
              fontWeight: FontWeight.bold,
              letterSpacing: .5,
              fontSize: 15,
              color: Colors.black,
            ),
          ),
      ],
    )

application 标记上方的android\app\src\main\AndroidManifest.xml 文件中添加以下行

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

转到android\app\build.gradle 文件并更改以下更改

compileSdkVersion 31
minSdkVersion 21
targetSdkVersion 29

【讨论】:

* 出了什么问题:任务 ':geolocator_android:compileDebugJavaWithJavac' 执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。 * 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。 * 在help.gradle.orgBUILD FAILED in 32s 获得更多帮助 异常:Gradle 任务 assembleDebug 失败,退出代码为 1 @HamZa 查看我更新的答案并更改android\app\build.gradle 文件和re-run 您的应用程序中的一些代码并告诉我

以上是关于如何在颤动中获取用户的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何从颤动的坐标中获取城市?

如何在颤动中回调谷歌位置服务对话框按钮点击?

如何在颤动中获取用户的电话号码

如何在颤动中获得估计的旅行时间和距离

检查用户位置是不是在颤动的2个地理点的区域内

如何在颤动中从实时数据库中获取特定数据?