Flutter使用高德地图获取定位

Flutter使用高德地图获取定位

Github地址:高德定位Flutter插件
具体配置项可查阅官方说明文档

1. 初始化变量

Map<String, Object> _locationResult;
StreamSubscription<Map<String, Object>> _locationListener;
AmapLocationFlutterPlugin _locationPlugin = new AmapLocationFlutterPlugin();

2. 设置API Key并调用定位方法

void initState() {
    super.initState();
    AmapLocationFlutterPlugin.setApiKey(
        'Android Key', 'iOS Key');
    _registerListener();
}

3. 定位方法

_registerListener() async {
    // 请求系统定位权限
    await _handlePermission();
    // 配置定位的参数
    _setLocationOption();
    // 获取定位结果的监听方法
    _locationListener = _locationPlugin
        .onLocationChanged()
        .listen((Map<String, Object> result) {
      setState(() {
        print(result);
        // 将结果存在变量中
        _locationResult = result;
    });
    // 开始定位
    // 如果不需要在initState阶段调用定位则不需要这句
    _locationPlugin.startLocation();
}

4. 获取权限的方法

Future<void> _handlePermission() async {
  // 使用permission_handler: ^5.0.1+1组件获取权限
  await Permission.location.request();
}

5. 设置定位参数的方法

void _setLocationOption() {
    if (null != _locationPlugin) {
      AMapLocationOption locationOption = new AMapLocationOption();

      ///是否单次定位
      locationOption.onceLocation = true;

      ///是否需要返回逆地理信息
      locationOption.needAddress = true;

      ///逆地理信息的语言类型
      locationOption.geoLanguage = GeoLanguage.ZH;

      locationOption.desiredLocationAccuracyAuthorizationMode =
          AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;

      locationOption.fullAccuracyPurposeKey = "AMapLocationScene";

      ///设置Android端连续定位的定位间隔
      locationOption.locationInterval = 2000;

      ///设置Android端的定位模式<br>
      ///可选值:<br>
      ///<li>[AMapLocationMode.Battery_Saving]</li>
      ///<li>[AMapLocationMode.Device_Sensors]</li>
      ///<li>[AMapLocationMode.Hight_Accuracy]</li>
      locationOption.locationMode = AMapLocationMode.Hight_Accuracy;

      ///设置iOS端的定位最小更新距离<br>
      locationOption.distanceFilter = -1;

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

      ///设置iOS端是否允许系统暂停定位
      locationOption.pausesLocationUpdatesAutomatically = false;

      ///将定位参数设置给定位插件
      _locationPlugin.setLocationOption(locationOption);
    }
}

6. 通过按钮触发定位

RaisedButton(
  child: Text('点击定位'),
  onPressed: () {
    _locationPlugin.startLocation();
  }
)

7. 销毁定位

  @override
  void dispose() {
    super.dispose();
    // 停止定位
    if (null != _locationPlugin) {
      _locationPlugin.stopLocation();
    }

    // 移除定位监听
    if (null != _locationListener) {
      _locationListener.cancel();
    }

    // 销毁定位
    if (null != _locationPlugin) {
      _locationPlugin.destroy();
    }
  }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值