csp_amap_flutter_location 1.0.0 copy "csp_amap_flutter_location: ^1.0.0" to clipboard
csp_amap_flutter_location: ^1.0.0 copied to clipboard

A Flutter plugin for AMap location services, supporting Android, iOS and HarmonyOS platforms. 高德地图定位SDK Flutter插件,支持Android、iOS和鸿蒙平台。

前述 #

  1. 高德定位Flutter插件
  2. 登录高德开放平台官网分别申请Android端iOS端的key
  3. 如需了解高德定位SDK的相关功能,请参阅Android定位SDK开发指南iOS定位SDK开发指南

安装 #

在 pubspec.yaml 中添加依赖:

dependencies:
  csp_amap_flutter_location:
    git:
      url: https://gitee.com/chenshipeng0914/csp_amap_flutter_location.git

使用高德定位Flutter插件 #

常见问题: #

1、在iOS设备上运行或者运行iOS工程遇到: Invalid Podfile file: cannot load such file - /flutter/packages/flutter_tools/bin/podhelper

$ rm ios/Podfile
$ flutter build ios

在需要的定位功能的页面中引入定位Flutter插件的dart类 #

import 'package:st_amap_flutter_location/amap_flutter_location.dart';
import 'package:st_amap_flutter_location/amap_location_option.dart';

接口说明 #

设置定位参数 #

 /// 设置定位参数
 void setLocationOption(AMapLocationOption locationOption)

将您设置的参数传递到原生端对外接口,目前支持以下定位参数


 //// 是否需要开启locatingWithReGeocode,默认false
  bool locatingWithReGeocode = false;

 //// 是否需要地址信息,默认true
  bool needAddress = true;

  ///逆地理信息语言类型<br>
  ///默认[GeoLanguage.DEFAULT] 自动适配<br>
  ///可选值:<br>
  ///<li>[GeoLanguage.DEFAULT] 自动适配</li>
  ///<li>[GeoLanguage.EN] 英文</li>
  ///<li>[GeoLanguage.ZH] 中文</li>
  GeoLanguage geoLanguage;

  ///是否单次定位
  ///默认值:false
  bool onceLocation = false;

  ///Android端定位模式, 只在Android系统上有效<br>
  ///默认值:[AMapLocationMode.Hight_Accuracy]<br>
  ///可选值:<br>
  ///<li>[AMapLocationMode.Battery_Saving]</li>
  ///<li>[AMapLocationMode.Device_Sensors]</li>
  ///<li>[AMapLocationMode.Hight_Accuracy]</li>
  AMapLocationMode locationMode;

  ///Android端定位间隔<br>
  ///单位:毫秒<br>
  ///默认:2000毫秒<br>
  int locationInterval = 2000;

  ///iOS端是否允许系统暂停定位<br>
  ///默认:false
  bool pausesLocationUpdatesAutomatically = false;

  /// iOS端期望的定位精度, 只在iOS端有效<br>
  /// 默认值:最高精度<br>
  /// 可选值:<br>
  /// <li>[DesiredAccuracy.Best] 最高精度</li>
  /// <li>[DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度 </li>
  /// <li>[DesiredAccuracy.NearestTenMeters] 10米 </li>
  /// <li>[DesiredAccuracy.Kilometer] 1000米</li>
  /// <li>[DesiredAccuracy.ThreeKilometers] 3000米</li>
  DesiredAccuracy desiredAccuracy = DesiredAccuracy.Best;

  /// iOS端定位最小更新距离<br>
  /// 单位:米<br>
  /// 默认值:-1,不做限制<br>
  double distanceFilter = -1;

  ///iOS 14中设置期望的定位精度权限
  AMapLocationAccuracyAuthorizationMode desiredLocationAccuracyAuthorizationMode = AMapLocationAccuracyAuthorizationMode.FullAccuracy;

  /// iOS 14中定位精度权限由模糊定位升级到精确定位时,需要用到的场景key fullAccuracyPurposeKey 这个key要和plist中的配置一样
  String fullAccuracyPurposeKey = "";

开始定位 #

void startLocation()

停止定位 #

void stopLocation()

销毁定位 #

高德定位Flutter插件,支持多实例,请在weidet执行dispose()时调用当前定位插件的销毁方法

void destroy()

定位结果获取 #

原生端以键值对map的形式回传定位结果到Flutter端, 通过onLoationChanged返回定位结果

Stream<Map<String, Object>> onLocationChanged()

注册定位结果监听


_locationPlugin
        .onLocationChanged()
        .listen((Map<String, Object> result) {
          ///result即为定位结果
        }

定位结果是以map的形式返回的,具体内容为


/// `callbackTime`:回调时间,格式为"yyyy-MM-dd HH:mm:ss"
 ///
 /// `locationTime`:定位时间, 格式为"yyyy-MM-dd HH:mm:ss"
 ///
 /// `locationType`:  定位类型, 具体类型可以参考https://lbs.amap.com/api/android-location-sdk/guide/utilities/location-type
 ///
 /// `latitude`:纬度
 ///
 /// `longitude`:精度
 ///
 /// `accuracy`:精确度
 ///
 /// `altitude`:海拔, android上只有locationType==1时才会有值
 ///
 /// `bearing`: 角度,android上只有locationType==1时才会有值
 ///
 /// `speed`:速度, android上只有locationType==1时才会有值
 ///
 /// `country`: 国家,android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `province`: 省,android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `city`: 城市,android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `district`: 城镇(区),android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `street`: 街道,android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `streetNumber`: 门牌号,android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `cityCode`: 城市编码,android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `adCode`: 区域编码, android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `address`: 地址信息, android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `description`: 位置语义, android上只有通过[AMapLocationOption.needAddress]为true时才有可能返回值
 ///
 /// `errorCode`: 错误码,当定位失败时才会返回对应的错误码, 具体错误请参考:https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode
 ///
 /// `errorInfo`: 错误信息, 当定位失败时才会返回
 

简单示例 #

import 'package:flutter/material.dart';
import 'package:st_amap_flutter_location/amap_flutter_location.dart';
import 'package:st_amap_flutter_location/amap_location_option.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  AMapFlutterLocation _locationPlugin = AMapFlutterLocation();
  Map<String, Object>? _locationResult;

  @override
  void initState() {
    super.initState();
    
    // 设置隐私政策
    AMapFlutterLocation.updatePrivacyShow(true, true);
    AMapFlutterLocation.updatePrivacyAgree(true);
    
    // 设置API Key
    AMapFlutterLocation.setApiKey(
      "您的Android端Key", 
      "您的iOS端Key",
      ohosKey: "您的鸿蒙端Key" // 可选
    );
    
    // 监听定位结果
    _locationPlugin.onLocationChanged().listen((Map<String, Object> result) {
      setState(() {
        _locationResult = result;
      });
    });
  }

  @override
  void dispose() {
    // 销毁定位
    _locationPlugin.destroy();
    super.dispose();
  }

  // 开始定位
  void _startLocation() {
    // 设置定位参数
    AMapLocationOption locationOption = AMapLocationOption();
    locationOption.onceLocation = false;
    locationOption.needAddress = true;
    _locationPlugin.setLocationOption(locationOption);
    
    // 启动定位
    _locationPlugin.startLocation();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('高德定位示例')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: _startLocation,
                child: Text('开始定位'),
              ),
              SizedBox(height: 20),
              if (_locationResult != null)
                Text('定位结果: ${_locationResult.toString()}'),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
0
points
184
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for AMap location services, supporting Android, iOS and HarmonyOS platforms. 高德地图定位SDK Flutter插件,支持Android、iOS和鸿蒙平台。

Homepage
Repository
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on csp_amap_flutter_location

Packages that implement csp_amap_flutter_location