如何在Flutter SDK 1.2.1上获取当前位置

时间:2019-02-28 13:08:22

标签: android dart flutter location-services google-location-services

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:1)

可能直到现在您可能已经找到了解决方案,但我仍在添加此解决方案,以便其他人可以获取帮助

使用geolocator获取当前位置

在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');
  }
}

希望这会有所帮助

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  1. 在pubspec.yaml文件中的依赖项下方添加import _ from 'lodash' class SomeClass extends React.Component { constructor(props){ super(props) this.someArray = [] } static getDerivedStateFromProps(props, state){ if (!_.isEqual(props.data, state.prevData)) { this.someArray = 'somevalue' // how to set this variable in static function return {data: props.data, prevData: state.data } } } } :标记
  2. 在需要获取位置的dart文件中添加geolocator: ^4.0.3
  3. 为了获取android的位置,请在android项目清单文件中添加以下权限

import 'package:geolocator/geolocator.dart';

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  1. 对于IOS,您需要在IOS项目中<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 下的info.plist文件中添加以下行

    <dict>

    <key>NSLocationWhenInUseUsageDescription</key>

  2. 获取位置的功能

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

干杯!

答案 3 :(得分:0)

  1. pubsec.yaml 中添加地理位置插件

    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" />
  1. 对于 iOS ,在 info.plist
  2. 中添加以下键
<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>
  1. 创造功能以获取用户当前位置:
LatLng currentPostion;

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