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

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

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

笔优站长

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《Learning to Prompt for Vision-Language Models》CoOp论文中文校对版
  • C++_类和对象(下篇)—— 内部类、匿名对象、对象拷贝时的编译器优化
  • Linux进阶 修改文件所在组
  • 【C++二叉树】JZ36 二叉搜索树与双向链表
  • 屏幕录制电脑,推荐使用这些录制方式
  • 【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool
  • Python 实现Excel XLS和XLSX格式相互转换
  • 需要申请 TAC
  • 接口自动化测试框架实战(Pytest+Allure+Excel)
  • Renesas R7FA8D1BH (Cortex®-M85)内部RTC的应用
  • vue 2表格滚动加载
  • 心觉:成功学就像一把刀,有什么作用关键在于使用者(一)
  • STM32G474RE之RTC
  • 《Effective C++》第三版——让自己习惯C++
  • [性能]高速收发的TCP/MQTT通信
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 〔开发系列〕一次关于小程序开发的深度总结
  • css的样式优先级
  • iOS小技巧之UIImagePickerController实现头像选择
  • Js基础知识(四) - js运行原理与机制
  • Mysql5.6主从复制
  • php ci框架整合银盛支付
  • PHP的类修饰符与访问修饰符
  • php面试题 汇集2
  • redis学习笔记(三):列表、集合、有序集合
  • scala基础语法(二)
  • 不上全站https的网站你们就等着被恶心死吧
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前嗅ForeSpider教程:创建模板
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 我感觉这是史上最牛的防sql注入方法类
  • 项目管理碎碎念系列之一:干系人管理
  • 源码安装memcached和php memcache扩展
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ## 基础知识
  • #WEB前端(HTML属性)
  • #微信小程序:微信小程序常见的配置传值
  • $nextTick的使用场景介绍
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2020)Java后端开发----(面试题和笔试题)
  • (MATLAB)第五章-矩阵运算
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (九十四)函数和二维数组
  • (十八)Flink CEP 详解
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)VC++中ondraw在什么时候调用的
  • .apk 成为历史!
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .naturalWidth 和naturalHeight属性,
  • .NET BackgroundWorker
  • .net core Swagger 过滤部分Api
  • .net core 控制台应用程序读取配置文件app.config