如何在 flutter sdk 1.2.1 上获取当前位置

Mat*_*ani 6 android dart location-services flutter google-location-services

如何使用颤振在 android 设备上获取当前位置。我已经尝试了LocationGeoLocator插件,GeoLocator 3.0.0 在调试时显示此错误:

Launching lib\main.dart on Android SDK built for x86 in debug mode...
Run Code Online (Sandbox Code Playgroud)

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

  • 出了什么问题:任务“:app:preDebugBuild”的执行失败。

    Android 依赖项“android.arch.lifecycle:runtime”对于编译 (1.0.0) 和运行时 (1.1.0) 类路径具有不同的版本。您应该通过 DependencyResolution 手动设置相同的版本

位置 2.0.0也会在调试时引发错误。还有另一个名为geoLocation 的插件可用,但它与 dart 2.0 不兼容。在这种情况下,我如何获得位置(经度和纬度)[一次]?任何帮助将不胜感激。

小智 13

按照以下步骤在 IOS 和 Android 中获取位置。

  1. geolocator: ^4.0.3 在依赖项下面添加pubspec.yaml 文件:标记
  2. import 'package:geolocator/geolocator.dart';在需要获取位置的地方添加dart 文件
  3. 为了获取 android 的位置,在 android 项目清单文件中添加以下权限

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

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

  1. 对于 IOS,您需要<dict>在 IOS 项目下的 info.plist 文件中添加以下行

    <key>NSLocationWhenInUseUsageDescription</key>

    <string>This app needs access to location when open.</string>

  2. 获取位置的函数

    void getLocation() async { Position position = await Geolocator .getCurrentPosition(desiredAccuracy: LocationAccuracy.high); print(position); }

干杯!


小智 6

  1. pubsec.yaml 中添加 GeoLocation Plugin
    geolocator: ^6.0.0

  2. 运行flutter pub get

  3. 在 app/src/main/AndroidManifest.xml 中为Android添加位置权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
  1. 对于iOS,info.plist 中添加以下键
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
Run Code Online (Sandbox Code Playgroud)
  1. 获取用户当前位置的 Creart 函数:
LatLng currentPostion;

void _getUserLocation() async {
        var position = await GeolocatorPlatform.instance
            .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    
        setState(() {
          currentPostion = LatLng(position.latitude, position.longitude);
        });
      }
Run Code Online (Sandbox Code Playgroud)
  1. 在您的 googlemap 中使用 currentPostion。(定义 Latlag currentPosition);
GoogleMap(
             // onMapCreated: _onMapCreated,
             initialCameraPosition: CameraPosition(
               target: currentPostion,
               zoom: 10,
             ),  
           ),
Run Code Online (Sandbox Code Playgroud)


Mat*_*ani 1

我安装的 geoLocator 插件使用 Android x jetpack 库,而我的项目使用支持库,因此这种冲突导致了问题,当我更新项目以使用 Android x 库时,问题得到解决。