Flutter百度地图

2023-05-16

Flutter百度地图-重构项目

一、实现效果如下图

qq交流群:群号:730772561

1、地图中任意踩点进行杆塔和设备的新建,对与点和线进行关联请添加图片描述

2、对于点和线进行各种操作。

请添加图片描述

3、自定义区域下载离线地图。

在这里插入图片描述

4…热烈线

5…自定义瓦片地图

6…热力地图等…地图动画等…多边形转换动画等

…很多慢慢来

如上图项目中有点线,
1.我们实现点和线。
2.对点和线进行连接。
3.设置点和线文字等。

到项目的我完成。

二、开始写项目

1、项目项目添加依赖。

.yaml下面添加
flutter_bmfmap: ^1.0.1
flutter_bmfutils: ^1.0.1

2、获取然后设置清单文件的AK百度官方文档等。

3、可能很多的小伙伴会遇到如下错位置并且奔溃 “android/platform_view_android_jni.cc”

//Flutter运行出现下面提示
android/platform_view_android_jni.cc     
//原生环境运行出现下面。
SDKInitializer.initialize(getApplicationContext())......
   这里我们需要初始化MyApplication并且继承BmfMapApplication看了分装源码的就会知道。
   在BmfMapApplication里面进行了SDK的初始化init操作。在集成过程中遇到的问题。
 在原生Android main下面进行继承
class MyApplication : BmfMapApplication() {

}

且在AndroidMmanifest.xml下面配置如下代码解决问题

<application
        android:name=".MyApplication"///这里去引用MyApplication进行初始化SDK
        android:label="flutterosm"
        android:icon="@mipmap/ic_launcher">

4、打开官方文档我们进行新App的开发旅程。

1.我们首先看看如何加载地图的

地图Flutter Widget构造,BMFMapWidget是地图Flutter插件封装的一个支持AndroidView和UiKitView的Widget。官方文档如下。

Container(
      height: screenSize.height,
      width: screenSize.width,
      child: BMFMapWidget(
        onBMFMapCreated: (controller) {
            
        },
        mapOptions: mapOptions,
      ),
    );
2、BMFMapOptions构造,BMFMapOptions包含了创建地图所需要的各种状态参数[显示样式,限制地图的显示范围,当前地图的中心点,地图的自定义最大最小比例尺级别…看官方文档

BMFMapOptions mapOptions = BMFMapOptions(
        center: BMFCoordinate(39.917215, 116.380341),
        zoomLevel: 12,
        mapPadding: BMFEdgeInsets(left: 30, top: 0, right: 30, bottom: 0));

我们直接上代码

import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'package:flutter_bmfbase/BaiduMap/bmfmap_base.dart' show BMFMapSDK, BMF_COORD_TYPE;
import 'package:flutter_bmfbase/BaiduMap/bmfmap_base.dart';
import 'package:flutter_bmfmap/BaiduMap/bmfmap_map.dart';
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // 百度地图sdk初始化鉴权
  if (Platform.isIOS) {
    BMFMapSDK.setApiKeyAndCoordType(
        '请在此输入您在开放平台上申请的API_KEY', BMF_COORD_TYPE.BD09LL);
  } else if (Platform.isAndroid) {
    // Android 目前不支持接口设置Apikey,
    // 请在主工程的Manifest文件里设置,详细配置方法请参考官网(https://lbsyun.baidu.com/)demo
    BMFMapSDK.setCoordType(BMF_COORD_TYPE.BD09LL);
  }

  runApp(new MyApp());
}

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

class _MyAppState extends State<MyApp> {
  BMFMapOptions mapOptions;

  @override
  void initState() {
    super.initState();
    mapOptions = BMFMapOptions(
        center: BMFCoordinate(39.917215, 116.380341),
        zoomLevel: 12,
        mapPadding: BMFEdgeInsets(left: 30, top: 0, right: 30, bottom: 0));
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar:AppBar(
          title:Text('百度地图flutter插件Demo'),
        ),
        body: BMFMapWidget(
          onBMFMapCreated: (controller) {

          },
          mapOptions: mapOptions,
        ),
      ),
    );
  }
}

效果如下图

在这里插入图片描述
接下来我们进行基本的按钮和界面一样。
请添加图片描述

5、百度定位和百度地图以及其他插件直接的冲突和bug
1、可能出现 BaiduLBS_Android.jar 的冲突。

“find libs BaiduLBS_Android.jar and jetb_BaiduLBS_Android.jar” 去每一个依赖了的builde.gradle里面只能有且一个api其他的都需要compileOnly

 compileOnly files('libs/BaiduLBS_Android.jar')
2、出现 …path ‘lib/arm64-v8a/libindoor.so’…
  • What went wrong:
    Execution failed for task ‘:app:transformNativeLibsWithMergeJniLibsForDebug’. More than one file was found with OS independent path ‘lib/arm64-v8a/libindoor.so’
* What went wrong:
Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.
> More than one file was found with OS independent path 'lib/arm64-v8a/libindoor.so'

在下面的Flutter plugins下面寻找库里面libs下面重复的so库然后在下面的build下面进行移除或者唯一

    packagingOptions{
        pickFirst 'lib/arm64-v8a/libindoor.so'
        pickFirst 'lib/x86/libindoor.so'
        pickFirst 'lib/x86_64/libindoor.so'
        pickFirst 'lib/armeabi-v7a/libindoor.so'
        pickFirst 'lib/x86_64/liblocSDK8a.so'
        pickFirst 'lib/arm64-v8a/liblocSDK8a.so'
        pickFirst 'lib/x86/liblocSDK8a.so'
        pickFirst 'lib/armeabi-v7a/liblocSDK8a.so'
    }

3、出现BMFMapWidget create失败…register
运行之后出FlutterBmfmapPlugin…没有register
我们去Flutter plugin下面找到flutter_bmfmap_1.0.1下面的src.main.FlutterBmmapPlugin

/**
 * FlutterBmfmapPlugin
 */
package com.baidu.flutter_bmfmap;

import android.os.Build;
import android.util.Log;

import androidx.annotation.NonNull;

import com.baidu.flutter_bmfmap.map.OfflineHandler;
import com.baidu.flutter_bmfmap.utils.Constants;
import com.baidu.flutter_bmfmap.utils.Env;

import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.plugin.platform.PlatformViewRegistry;

/**
 * FlutterBmfmapPlugin
 */
public class FlutterBmfmapPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler {
    private static final String TAG = FlutterBmfmapPlugin.class.getSimpleName();

    private OfflineHandler mOfflineHandler;
    //魔改百度地图插件 全局变量01
    private FlutterPluginBinding flutterPluginBinding;
    //魔改百度地图插件 全局变量02
    private PlatformViewRegistry mRegistrar;
    //魔改百度地图插件 方法01
    @Override
    public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
        mOfflineHandler = new OfflineHandler();
        mOfflineHandler.init(flutterPluginBinding.getBinaryMessenger());
        this.flutterPluginBinding = flutterPluginBinding;
        //BMKMapView
        this.mRegistrar = flutterPluginBinding.getPlatformViewRegistry();
        Log.e(TAG, "onAttachedToEngine: "+"注册了" );

     //注释百度他们自己的东西
    /*ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
    String key = FlutterBmfmapPlugin.class.getSimpleName();
    if(shimPluginRegistry.hasPlugin(key)){
      if(Env.DEBUG){
        Log.d(TAG, "hasPlugin");
      }
      return;
    }

    mRegistrar = shimPluginRegistry.registrarFor(key);*/
    }

    // This static function is optional and equivalent to onAttachedToEngine. It supports the old
    // pre-Flutter-1.12 Android projects. You are encouraged to continue supporting
    // plugin registration via this function while apps migrate to use the new Android APIs
    // post-flutter-1.12 via https://flutter.dev/go/android-project-migration.
    //
    // It is encouraged to share logic between onAttachedToEngine and registerWith to keep
    // them functionally equivalent. Only one of onAttachedToEngine or registerWith will be called
    // depending on the user's project. onAttachedToEngine or registerWith must both be defined
    // in the same class.
    public static void registerWith(Registrar registrar) {
        OfflineHandler offlineHandler = new OfflineHandler();
        offlineHandler.init(registrar.messenger());
        registrar.platformViewRegistry().registerViewFactory(
                Constants.ViewType.sMapView,
                new MapViewFactory(registrar.activity()
                        , registrar.messenger()
                        , Constants.ViewType.sMapView));

        registrar.platformViewRegistry().registerViewFactory(
                Constants.ViewType.sTextureMapView,
                new TextureMapViewFactory(registrar.activity()
                        , registrar.messenger()
                        , Constants.ViewType.sTextureMapView));
    }

    @Override
    public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
        if (call.method.equals("getPlatformVersion")) {
            result.success("Android " + android.os.Build.VERSION.RELEASE);
        } else {

        }
    }

    @Override
    public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
        if (null == binding) {
            return;
        }

        BinaryMessenger binaryMessenger = binding.getBinaryMessenger();
        if (null == binaryMessenger) {
            return;
        }

        mOfflineHandler.unInit(binding.getBinaryMessenger());
    }
    //魔改百度地图插件 方法02
    @Override
    public void onAttachedToActivity(ActivityPluginBinding binding) {
      Log.e(TAG, "onAttachedToActivity: "+"绑定了" );
        if (null == binding || null == mRegistrar) {
            return;
        }
        //删除百度下面的。然后复制这几行
        mRegistrar.registerViewFactory(
                Constants.ViewType.sMapView,
                new MapViewFactory(binding.getActivity()
                        , flutterPluginBinding.getBinaryMessenger()
                        , Constants.ViewType.sMapView));

        mRegistrar.registerViewFactory(
                Constants.ViewType.sTextureMapView,
                new TextureMapViewFactory(binding.getActivity()
                        , flutterPluginBinding.getBinaryMessenger()
                        , Constants.ViewType.sTextureMapView));
    }

    @Override
    public void onDetachedFromActivityForConfigChanges() {
        Log.d(TAG, "onDetachedFromActivityForConfigChanges");
    }

    @Override
    public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
        Log.d(TAG, "onReattachedToActivityForConfigChanges");
    }

    @Override
    public void onDetachedFromActivity() {
        Log.d(TAG, "onDetachedFromActivity");
    }
}

要是大家觉得很麻烦:
5里的东西不用管了用下面的吧。已经上传git

https://gitee.com/xskill/flutter_bmfmap 群里的小哥直接放到git了。我当时打算推到dar库没成功就算了。

运行结果:完成定位和地图同时展示

慢慢来待续
视频教学同步走

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter百度地图 的相关文章

  • 使用EasyExcel实现Excel的导入导出

    文章目录 前言一 EasyExcel是什么 xff1f 二 使用步骤1 导入依赖2 编写文件上传配置3 配置表头对应实体类4 监听器编写5 控制层6 前端代码 总结 前言 在真实的开发者场景中 xff0c 经常会使用excel作为数据的载体
  • 使用linux部署项目步骤

    文章目录 前言一 服务器环境配置二 数据库导入三 项目打包1 修改项目中的访问路径2 修改db properties的数据库访问路径3 打包4 修改配置 xff0c 启动服务 四 测试总结 前言 今天学习了在服务器中部署项目 xff0c 记
  • IntelliJ IDEA 2023.1 最新变化 【附带ChatGPT教程】

    ChatGPT开源公众号 xff1a https gitee com wy521a astar weixin mp最新变化 2023 1主要更新用户体验编辑器JavaScala分析器版本控制系统构建工具运行 调试框架和技术DockerKub
  • SpringBoot整合Quartz以及异步调用

    文章目录 前言一 异步方法调用1 导入依赖2 创建异步执行任务线程池3 创建业务层接口和实现类4 创建业务层接口和实现类 二 测试定时任务1 导入依赖2 编写测试类 xff0c 开启扫描定时任务3 测试 三 实现定时发送邮件案例1 邮箱开启
  • SpringCloud详解07-Nacos配置管理

    系列文章目录 文章目录 系列文章目录前言一 nacos配置管理二 使用步骤1 基本配置2 导入Nacos配置 三 配置实时刷新总结 前言 接上篇 xff0c 本篇记录Nacos的配置管理 所有的代码都是基于前篇的基础上 一 nacos配置管
  • 使用SpringBoot+JWT+MybatisPlus实现简单的登陆状态验证

    文章目录 前言一 JWT是什么 xff1f 二 使用步骤1 创建项目 xff0c 导入依赖 xff0c 配置 引入工具类2 编写LoginController和UserController3 编写跨域拦截器和token验证拦截器4 全局拦截
  • 浅谈分布式锁

    文章目录 前言一 分布式锁 xff1f 二 实现思路1 存储一个唯一的键2 使用setnx3 给键设置唯一值4 因为超时导致的并发执行4 Redission5 代码实现 总结 前言 最近学习了分布式锁 xff0c 本篇来记录一下 一 分布式
  • 初识STM32单片机

    目录 一 单片机基本认知 二 STM系列单片机命名规则 三 标准库与HAL库区别 四 通用输入输出端口GPIO 五 推挽输出与开漏输出 六 复位和时钟控制 xff08 RCC xff09 七 时钟控制 八 中断和事件 九 定时器介绍 一 单
  • ubuntu16.04 安装ctags,以及一些使用方法的介绍

    vim对于新手来说太不友好了 xff0c 今天折腾ctags折腾了一天终于是有所收获 xff0c 现在来大概介绍一下 首先ctags顾名思义 xff0c 就算给各种库和 cpp文件打标签 xff0c 得到的标签文件给后面omni compl
  • Lottie 框架Native Heap内存爆炸问题解决

    Lottie框架Native Heap内存爆炸问题解决 Lottie 是在 Android 和 iOS上 原生渲染 的After Effects xff08 AE xff09 动画 Lottie是 Airbnb 开源 的支持Android
  • Kali 美化

    配置完Kali xff0c 作为一个正常人 xff0c 对于默认的Gnome的界面都会感觉到一丝丝不满意 xff0c 毕竟太丑了嘛 那么 xff0c 我们需要对Kali美化一下 首先是桌面切换 xff0c 如果你不喜欢Gnome xff0c
  • 安装Arch(含输入法配置)

    先创建一个虚拟机 xff0c 这是我的虚拟机配置 xff1a 然后查看虚拟机的配置文件 xff0c 编辑Arch vmx文件 xff0c 最后一行添加 firmware 61 34 efi 34 保存退出 xff0c 启动你的虚拟机 不出意
  • 使用ViewPager + FragmentStatePagerAdapter 切换后页面数据加载空白或者丢失

    开头直接上结论 xff01 xff01 xff01 xff01 xff01 xff01 第一种原因 xff1a onCreateView中没有做view持久化 viewpage切换的时候Fragment的生命周期会重新走一遍 xff0c 从
  • DataGrip 2023.1 最新变化 【附带ChatGPT教程】

    ChatGPT开源公众号 xff1a https gitee com wy521a astar weixin mp在浏览器中打开最新变化 DataGrip 2023 1 最新变化 处理代码 DBE 4469 xff1a 我们修正了 SQL
  • awk练习题(一)

    文件中包含名字 xff0c 电话号码和过去三个月里的捐款 用 分隔 具体内容如下 xff1a Mike Harrington 510 548 1278 250 100 175 Christian Dobbins 408 538 2358 1
  • UML类图-基本图示法

    类图 xff1a 分如下三层 类的名称 xff08 如果是抽象类则斜体显示 xff09 类的特性 xff08 字段或属性 xff1a 注意前面的符号 xff1a 43 表示public xff0c 表示private xff0c 表示pro
  • 《Design Patterns》Proxy.积跬步系列

    Proxy xff1a 代理模式 先代码 共用接口 xff1a span class token keyword package span h span class token punctuation span l span class t
  • 《Design Patterns》FactoryMethod.积跬步系列

    FactoryMethod xff1a 工厂方法模式 先代码 父类或接口类 xff1a span class token keyword package span h span class token punctuation span ld
  • Java基础总结二

    Java关键字 xff08 特点及关键字作用 xff09 xff1a xff08 1 xff09 被Java语言赋予特殊含义的单词 xff08 53个含两个保留字 xff09 xff08 2 xff09 关键字都是小写 xff08 3 xf
  • SVN快速使用入门

    协同开发时 xff0c 我们时常会听说SVN这个词 xff0c 那么SVN到底是什么 xff1f 又是怎么玩的 xff1f 笔者在初探SVN后进行一个简单的总结 SVN xff1a Subversion的简称 xff0c 是一个开放源代码的

随机推荐

  • 解决Red Hat6.0以上使用yum命报错Loaded plugins: product-id, refresh-packagekit, security, subscription-manager

    什么是yum xff1a Yum xff08 全称为 Yellow dog Updater Modified xff09 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器 基于RPM包管理 xff0c 能够从
  • Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found

    org apache ibatis exceptions PersistenceException Error updating database Cause org apache ibatis executor ExecutorExcep
  • [Linux] 记录一次批量开关机操作

    最近公司需要停一部分机器测试下业务稳定性 关停很简单 ansible 就可以了 xff0c 一句命令 ansible guanji m command a 34 shutdown h now 34 定义的关机组 guanji 过了两周 xf
  • 生活篇

    春天 xff0c 一个诗情画意的季节 xff0c 一个生机勃勃的季节 春天 xff0c 为我们带来了温暖 xff0c 为大地带来了生机 在这个春意盎然的季节 xff0c 大自然也开始了她们的春天交响曲 我喜欢三月 xff0c 我也讨厌三月
  • WebStorm 2023.1 最新变化【附带ChatGPT教程】

    ChatGPT开源公众号 xff1a https gitee com wy521a astar weixin mp 观看更新概览视频 在浏览器中打开更新变化 WebStorm 2023 1 最新变化 框架和技术 Astro 支持 备受期待的
  • Ubuntu18.04解决gnome-tweak-tool安装后shell主题提示user-theme extension没有启用的问题

    换用Ubuntu18之后 xff0c 桌面又回到了gnome xff0c 因此找到了gnome tweak tool对桌面进行美化 1 安装gnome tweak tool sudo apt get install gnome tweak
  • 多生产者和多消费者问题

    题目描述 桌子上有一个盘子 xff0c 每次只能向其中放入一个水果 爸爸专门向盘子里面放苹果 xff0c 妈妈专门向盘子里面放橘子 xff1b 只有盘子为空时 xff0c 爸爸或妈妈才可以向其中放入水果 xff1b 仅当盘子里有自己需要的水
  • ssh远程连接服务器常用命令

    命令行下 xff0c 使用ssh 远程登录服务器 ssh 39 用户名 39 64 39 IP地址 39 不用加 39 号 xff0c 这里是为了作区分 39 用户名 39 64 39 IP地址 39 39 s password xxx 项
  • 记录在安卓webview上,gif,apng,pixi.js,lottie-web动画导致闪屏问题

    随着公司项目对动画要求越来越高 xff0c 从由美术提供简单的gif 或者css js开发简单动画变成了使用渲染引擎pixi js使用序列帧动画 xff0c 或者使用龙骨 xff0c spine等更加复杂炫酷的动画 但是发现屏幕在播放动画的
  • 黑苹果_万能OpenCore_0.8.4_EFI

    对于喜欢折腾黑苹果的人来说 xff0c 安装Mac系统就是家常便饭 xff0c 其中最重要的就是EFI的配置 xff0c 配置出一个适合自己电脑的EFI很重要 xff0c 今天发布这篇文章就是为了提供给新加入的伙伴们 xff0c 让更多的伙
  • 黑苹果_OpenCore_0.8.4各项功能精解

    黑苹果已经延续有些年了 xff0c 引导也更新换代过好几次 xff0c 安装黑苹果的第一个条件就是需要拥有一个支持引导苹果系统的EFI xff0c 否则 xff0c 连苹果皮都看不到 xff0c 虽然网上可以直接下载EFI xff0c 但是
  • Github域名解析连接慢问题

    Github域名解析连接慢问题 1 Github访问慢问题2 Github连接解决方案2 1 使用 Gitee 的镜像仓库2 2 配置本地的 hosts 文件 3 DNS域名解析分析3 1 根域名服务器3 1 顶级域名服务器3 1 域名解析
  • C++判断素数(求素数)

    素数又称质数 所谓素数是指除了 1 和它本身以外 xff0c 不能被任何整数整除的数 xff0c 例如17就是素数 xff0c 因为它不能被 2 16 的任一整数整除 思路1 xff1a 因此判断一个整数m是否是素数 xff0c 只需把 m
  • Directx工具修复工具,专注修复C++动态链接DLL文件

    问题 xff1a 方法一 xff1a 可以直接去360管家中搜索DirectX xff0c 然后下载 xff0c 进行修复 方法二 xff1a 如下 xff1a DirectX修复工具最新版 xff1a DirectX Repair V3
  • shell脚本实现在任意虚拟机上 一键重启/关闭 多台虚拟机

    shell脚本实现在任意虚拟机上 一键重启 关闭 多台虚拟机 span class token operator span span class token operator span bin span class token operat
  • ChatGPT体验地址,超多功能,附公众号源码

    GPT 说明效果演示地址体验公众号源码 说明 ChatGPT是一种基于深度学习的自然语言处理 xff08 NLP xff09 技术 xff0c 它可以实现自然的文字对话 ChatGPT是基于预训练的语言模型 xff0c 使用大量的数据和计算
  • Android Native内存泄漏案例

    文章目录 背景现状malloc debugLeakTracer综合评估功能性能稳定性治理实践 案例 使用Raphael 定位内存泄漏 项目中遇到一个内存泄漏的情形 xff1a usb camera预览时出现了内存泄漏 xff0c 但内存泄漏
  • 【The 2017 BAPC】C题-Collatz Conjecture ---- GCD+优化去重

    题意 给你一个大小为n的序列 xff0c 让你求里面所有子串的GCD xff0c 求里面最多有多少不同的GCD 思路 xff1a 利用集合set tmp维护 到当前子串的最后一个元素的所有GCD xff0c set ans保存所有不同种类的
  • WGS84与大地2000坐标转换(Java,C#,Dart)

    一 坐标转换的必要性 平面坐标在道路测绘 隧道测量 农业建筑业等室外勘测等方面有着广泛的应用 各行业基本都会涉及到移动端测量之后不能满足屏幕坐标 所以需要经纬度的转换 移动端勘测结果都是WGS84坐标或者GCJ 02格式坐标 而实际工程项目
  • Flutter百度地图

    Flutter百度地图 重构项目 一 实现效果如下图 qq交流群 群号 730772561 1 地图中任意踩点进行杆塔和设备的新建 对与点和线进行关联 2 对于点和线进行各种操作 3 自定义区域下载离线地图 4 热烈线 5 自定义瓦片地图