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

Posted

技术标签:

【中文标题】如何在颤振 sdk 1.2.1 上获取当前位置【英文标题】:How to get current location on flutter sdk 1.2.1 【发布时间】:2019-07-22 09:58:57 【问题描述】:

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

Launching lib\main.dart on Android SDK built for x86 in debug mode...

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

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

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

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

【问题讨论】:

您是否在 AndroidManifest.xml 中添加了<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 权限? 是的。权限没有问题。我还使用了适用于 Android 6+ 设备的 uses_permission 插件来明确请求权限。 【参考方案1】:

按照这些步骤在 ios 和 Android 中获取位置。

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

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

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

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

    <key>NSLocationWhenInUseUsageDescription</key>

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

    获取位置的功能

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

干杯!

【讨论】:

对我来说它仍然失败。收到此错误。 E/location_permissions(24439): Flutter 结果对象为空。 仍然没有得到当前位置【参考方案2】:

    pubsec.yamlgeolocator: ^6.0.0

    中添加 GeoLocation 插件

    运行 flutter pub get

    在 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" />
    对于 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>
    获取用户当前位置的创建函数:
LatLng currentPostion;

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

【讨论】:

3 号为我工作!我之前只尝试过一个,而不是同时尝试三个:)...谢谢!【参考方案3】:

到目前为止,您可能已经找到了解决方案,但我仍在添加此解决方案,以便其他人可以获得帮助

使用地理定位器获取当前位置

在 pubsec.yaml 中

  geolocator: '^2.0.1'

在你的飞镖文件中

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';

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

class MapScreen extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: "Map",
      home: MapActivity(),
    );
  


class MapActivity extends StatefulWidget 
  @override
  _MapActivityState createState() => _MapActivityState();


class _MapActivityState extends State<MapActivity> 
  LatLng _center ;
  Position currentLocation;

  @override
  void initState() 
    // TODO: implement initState
    super.initState();
    getUserLocation();
  

 Future<Position> locateUser() async 
    return Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  

  getUserLocation() async 
    currentLocation = await locateUser();
    setState(() 
      _center = LatLng(currentLocation.latitude, currentLocation.longitude);
    );
    print('center $_center');
  

希望对你有帮助

【讨论】:

谢谢。由于库冲突,我遇到了这个问题,将我的项目更新到 Android x 库解决了这个错误。【参考方案4】:

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

【讨论】:

以上是关于如何在颤振 sdk 1.2.1 上获取当前位置的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在颤振应用程序中从谷歌地图获取特定位置的照片[关闭]

安装flutter时如何修复“在此位置找不到Android SDK”错误?

如何在颤振中从谷歌地图获取位置的经纬度坐标?

iOS SDK中当前位置的方位

如何在 iOS SDK 上通过给定的邮政编码 (ZIP) 获取国家/地区名称

如何创建自定义颤振 sdk 小部件,重建颤振和使用新的小部件