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

How to get current location on flutter sdk 1.2.1

如何使用 flutter 在 android 设备上获取当前位置。我已经尝试了两个 Location and GeoLocator 插件 GeoLocator 3.0.0 在调试时显示此错误:

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

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

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

直到现在你可能已经找到了解决方案,但我仍然添加这个以便其他人可以获得帮助

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

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

希望对您有所帮助

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

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

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

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

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

  1. 对于 IOS,您需要在 IOS 项目

    <dict> 下的 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); }

干杯!

  1. pubsec.yaml
    中添加 GeoLocation 插件 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. 对于 iOSinfo.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. 获取用户当前位置的 Creart 函数:
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 当前位置);
GoogleMap(
             // onMapCreated: _onMapCreated,
             initialCameraPosition: CameraPosition(
               target: currentPostion,
               zoom: 10,
             ),  
           ),