当前位置: 首页 > article >正文

flutter集成百度地图定位 ‘BMKLocationManager.h‘ file not found报错

一、写在前面

好久不见~最近接手了一个flutter的项目,需求是接入百度地图的定位插件。但是按照官网的文档来做,安卓没有问题,但是ios就惨了,各种编译报错。

flutter_bmflocation: ^3.6.0 集成报错 ‘BMKLocationManager.h’ file not found
有需要的可以直接拉最下面,看解决方案。

我也没写过原生开发的语言,所以这个对我一个写前端的来说还是有那么一丢丢难度。

关注公众号“笔优站长”可阅读全部文章哟。

二、报错的内容

编译报错
xcode的报错

报错

三、解决方案

百度官方的方案(我试了几次,一点卵用都没得,避坑!!!)
在这里插入图片描述
然后提了工单,来来回回很久了。还是没得一点卵用
在这里插入图片描述

最后的解决方案,我去看了一下源码和引用。就试着把头文件这里替换为

注意 #import <BMKLocationkit/BMKLocationComponent.h> 的BMKLocationkit的k要大写!!

#import <BMKLocationKit/BMKLocationComponent.h>

原文是去看的ios的原生定位开发文档,下面的原文链接:
https://lbs.baidu.com/faq/api?title=ios-locsdk/guide/get-location/once

终极方案

四、实测

在这里插入图片描述
测试Android 定位
在这里插入图片描述
测试 ios
在这里插入图片描述
一切正常,编译也不会报错了。大功告成~

再附上一部分源码
import 'dart:async';
import 'dart:io';

import 'package:fl_location/fl_location.dart';
import 'package:flutter_bmflocation/flutter_bmflocation.dart';
import 'package:sem/common/utils/models/logger.dart';

///
/// 位置服务相关
/// 
class BMLocation{

  ///
  /// 检查是否开启了位置权限
  ///
  static Future<bool> checkAndRequestPermission({
    bool? background,
  }) async {
 

    if (!await FlLocation.isLocationServicesEnabled) {
      return false;
    }

    var locationPermission = await FlLocation.checkLocationPermission();
    if (locationPermission == LocationPermission.deniedForever) {
      // Cannot request runtime permission because location permission is denied forever.
      return false;
    } else if (locationPermission == LocationPermission.denied) {
      // Ask the user for location permission.
      locationPermission = await FlLocation.requestLocationPermission();
      if (locationPermission == LocationPermission.denied ||
          locationPermission == LocationPermission.deniedForever) {
        return false;
      }
    }

    // Location permission must always be allowed (LocationPermission.always)
    // to collect location data in the background.
    if (background == true && locationPermission == LocationPermission.whileInUse) {
      return false;
    }

    // Location services has been enabled and permission have been granted.
    return true;
  }

  ///
  /// 要获取当前位置,请使用该getLocation函数。
  ///
  static Future<Location?> getLocation({
    bool showToast = false,
    String tips = '',
    Function? onConfirm,
    Function? onCancel
  }) async {
    if (await checkAndRequestPermission()) {
      try {
        final LocationFlutterPlugin location = LocationFlutterPlugin();
        // 调用此方法前,应用启动的时候一定要先设置隐私协议,否则无法使用... 这里是例子, setAgreePrivacy 建议是应用启动的时候用户同意相关隐私的时候就直接设置了.
        // location.setAgreePrivacy(true);

        await location.prepareLoc({
          'needAddress': true
        }, {
           'needAddress': true
        });
        if(Platform.isAndroid){
          await location.startLocation();
          Completer<BaiduLocation> completer = Completer<BaiduLocation>();
          // 接受定位回调
          location.seriesLocationCallback(callback: completer.complete);
          BaiduLocation locationData = await completer.future;
          location.stopLocation();
          return Location.fromJson({
            'latitude': locationData.latitude,
            'longitude': locationData.longitude
          });
        } 
        
        if(Platform.isIOS){
          await location.singleLocation({'isReGeocode': true, 'isNetworkState': true});
          Completer<BaiduLocation> completer = Completer<BaiduLocation>();
          // 接受定位回调
          location.singleLocationCallback(callback: completer.complete);
          BaiduLocation locationData = await completer.future;
          return Location.fromJson({
            'latitude': locationData.latitude,
            'longitude': locationData.longitude
          });
        }
      } catch (e) {
        // SMToast.error(text: "获取当前位置出错");
        SMLog.e("获取当前位置出错:${e.toString()}");
      }
    }
    return null;
  }
}
五、写在后面

百度地图的flutter的坑是相当的多,我是踩了好几个了,需要注意的是flutter的开发文档不如原生的文档齐全,需要参考双端的原生文档更为稳妥。。。

有问题请留言或者@博主,谢谢支持o( ̄︶ ̄)o~

感谢您的阅读,如果此文章或项目对您有帮助,请扫个二维码点个关注吧,若可以的话再给个一键三连吧!

公众号阅读的朋友可以点一下右下角的在看分享哦。

GitHub有开源项目,需要的小伙伴可以顺手star一下!

GitHub: https://github.com/langyuxiansheng

更多信息请关注公众号: “笔优站长”

笔优站长

扫码关注“笔优站长”,支持站长

http://www.kler.cn/news/309847.html

相关文章:

  • 消防指挥中心控制台:守护安全的关键枢纽
  • TCP/IP协议概述
  • 【乐吾乐大屏可视化组态编辑器】使用手册
  • Android 用线程池实现一个简单的任务队列(Kotlin)
  • 红队打点的思路与信息收集
  • android.view.InflateException: Binary XML file line #7: Error inflating class
  • xilinx vivado PULLMODE 设置思路
  • linux 使用SSH密钥配置免密登录
  • 我要走遍三山五岳之---嵩山
  • 问题:WINCC 7.5 结构变量只能是内部变量吗?
  • linux 获取指定端口的PID netsat awk
  • 构建未来教育:智慧校园的功能与特色
  • MacOS安装MAT教程
  • 经典sql题(一)求连续登录不少于三天用户
  • Android 源码多个Launcher设置默认Launcher
  • 栈和队列OJ题C语言版
  • GDPU Vue前端框架开发 计数器
  • 机器学习实战—天猫用户重复购买预测
  • 论文不会写?分享6款AI论文写作免费一键生成网站!
  • 老友记台词 第二季 第一集 Friends 201(全英版)
  • Java 21的Enhanced Deprecation的笔记
  • 【小鹏汽车用户平台-注册安全分析报告-无验证方式导致安全隐患】
  • mac电脑命令行获取电量
  • PHP仓库物资出入库管理系统小程序源码
  • OTA升级
  • Python urllib
  • 智能化大数据平台引领企业迈向精准决策时代
  • java中的集合之List
  • 828华为云征文|华为Flexus云服务器搭建OnlyOffice私有化在线办公套件
  • 镀金引线---