Flutter开发百度地图,踩坑无数,保姆级教程(1)

非本人同意,禁止转载
最近在用flutter开发百度地图,踩坑无数,可以说把能踩的坑都踩了一遍,特此记录下辛酸经历。
下面描述的工程是配置Android的,ios并没有配置。
开发环境:sdk: “>=2.12.0 < 3.0.0”
Android Studio版本3.4.0


前言

官网里面把基本都把步骤写了,但是里面有很多不明确的点。刚接触到的人可能会不知道某些文件具体添加到哪里,代码添加也有可能出现问题。下面我将安装官网的例程步骤,一步一步进行配置。配置完成之后,一定是可以完美运行的。


一、引入flutter插件

flutter_baidu_mapapi_map
flutter_baidu_mapapi_search
fflutter_baidu_mapapi_utils
离谱的事情来了:官网上面的第三个插件flutter_baidu_mapapi_utils,多写一个f,flutter,官网写成fflutter。 我也没看清,直接复制的,导致我怎么安装都安装不了,人都傻了。
在这里插入图片描述
注意!!!: 这三个依赖的版本要获取官网最新的!!!不然在你引入依赖包的时候,run会报空安全错误。Error: Cannot run with sound null safety, because the following dependencies。
解决方法

  1. 就是获取最新版的依赖。
  2. 还有一种解决办法是将sdk的版本降低到2.0以下。

因为:Dart 语言已支持健全的空安全机制!
当你选择使用空安全时,代码中的类型将默认是非空的,意味着 除非你声明它们可空,它们的值都不能为空。有了空安全,原本处于你的 运行时 的空值引用错误将变为 编辑时 的分析错误。

请添加图片描述

二、 新建一个自定义的Application

很多刚开发的新人根本不知道在哪里新建自定义的Application。

第一步: 打开Android的底层

在这里插入图片描述

第二步(最关键)在app下面的层级下对应的目录里面创建一个MyApplication.java文件

在这里插入图片描述
在里面添加上如下的代码:记得修改下第一行package包的名字,改成自己项目的名字!!!

package com.example.flutter_map_blue;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.base.BmfMapApplication;
import io.flutter.app.FlutterApplication;

public class MyApplication extends BmfMapApplication  {

    @Override
    public void onCreate() {
        super.onCreate();
    }
}

等添加好后,就可以回到开发界面了。有可能你添加的那个文件,会报红,但是别怕,编译不会有问题的,具体什么原因我也不清楚,因为我的也报红。。。有人知道的话,可以评论区指点下。

第三步 在AndroidManifest.xml中声明该Application,ctrl点击是可以跳转的

在这里插入图片描述

三、混淆配置

官网上面有说明,这一步跟官网保持一致,具体是说明直接看官网就好了。

  1. 打开android 目录app下的build.gradle文件,在release代码块中添加如下内容。(默认情况下 flutter 不会开启 Android 的混 淆)

在这里插入图片描述

  1. 创建/android/app/proguard-rules.pro 文件

在这里插入图片描述

  1. 编写混淆文件,打开proguard-rules.pro文件,添加如下代码。

proguard-rules.pro里面的代码:
在这里插入图片描述


上述配置完成之后,基础配置就已经全部结束了。下面就将进行秘钥的配置项。

四、AK配置(秘钥配置)

  1. 在main.dart的main函数中添加如下代码:

在这里插入图片描述

  1. Android平台需要在AndroidManifest.xml文件里设置AK:

在这里插入图片描述

五、显示地图

创建一个widget的dart文件,把下面的代码复制进去,就是显示地图的。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart';
import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart';
import 'package:flutter_baidu_mapapi_search/flutter_baidu_mapapi_search.dart';
import 'package:flutter_map_blue/BaiduMapHelper.dart';


class TestBaiduMapPage extends StatefulWidget {
  @override
  _TestBaiduMapPageState createState() => _TestBaiduMapPageState();
}

class _TestBaiduMapPageState extends State<TestBaiduMapPage> {
  BMFMapController? dituController;
  @override
  void initState() {
    super.initState();
  }
  /// 创建完成回调
  void onBMFMapCreated(BMFMapController controller) {
    dituController = controller;

    /// 地图加载回调
    dituController?.setMapDidLoadCallback(callback: () {
      print('mapDidLoad-地图加载完成!!!');
    });
  }
  /// 设置地图参数
  BMFMapOptions initMapOptions() {
    BMFMapOptions mapOptions = BMFMapOptions(
      center: BMFCoordinate(39.917215, 116.380341),
      zoomLevel: 12,
      changeCenterWithDoubleTouchPointEnabled:true,
      gesturesEnabled:true ,
      scrollEnabled:true ,
      zoomEnabled: true ,
      rotateEnabled :true,
      compassPosition :BMFPoint(0,0) ,
      showMapScaleBar:false ,
      maxZoomLevel:15,
      minZoomLevel:8,
//      mapType: BMFMapType.Satellite
    );
    return mapOptions;
  }

  @override
  Widget build(BuildContext context) {
    Size screenSize = MediaQuery.of(context).size;
    return Scaffold(
      body:Container(
        width: screenSize.width,
        height: screenSize.height,
        child: BMFMapWidget(
          onBMFMapCreated: (controller) {
            onBMFMapCreated(controller);
          },
          mapOptions: initMapOptions(),
        ),
      ),
    );
  }
}

六、最终效果图

在这里插入图片描述

遇到的其他问题

  1. AndroidStudio Cannot fit requested classes in a single dex file (# methods: 72633 > 65536)
    看了很多博客说是下面这个原因:

当您的应用及其引用的库包含的方法数超过 65536 时,您会遇到一个构建错误

我的解决办法是用flutter clear这个命令,然后关机重启了一下,就好了。具体什么原因我也不清楚。

  1. Execution failed for task ‘:app:compileFlutterBuildDebug’. > Process 'command 'D:\flut
    这个问题我也是通过flutter clear;然后flutter run解决的。

期间还遇到了很多很多各式各样的问题,遇到问题不要怕,我百度不死他!

总结

源代码暂时还没有贴上来。按照上述的步骤应该是没有任何问题的。如果大家有问题,可以留言下。喜欢这篇教程的话记得一键三连,谢谢!

Flutter百度地图是一款基于Flutter技术开发地图应用程序。Flutter是一种跨平台的移动应用开发框架,而百度地图是一款功能强大的地图导航工具。这个应用程序结合了Flutter的跨平台特性和百度地图的功能,使得开发者可以轻松地创建出高性能、交互友好的地图应用。 使用Flutter百度地图可以实现很多功能,比如显示地图、标记位置、搜索地点、路线规划等。开发者可以通过调用Flutter百度地图提供的API来完成这些功能。Flutter百度地图API包括了地图的展示、交互、搜索、定位等功能,能够满足开发者对地图应用的各种需求。 使用Flutter百度地图进行地图展示时,开发者可以自定义地图样式,包括地图的颜色、标注点的图片、文字样式等。通过调用API,开发者可以在地图上添加标记点、覆盖物、绘制路线等,使得地图更加丰富多样。此外,开发者还可以利用Flutter百度地图的搜索功能,实现地点的搜索和周边兴趣点的展示。 在开发过程中,Flutter百度地图提供了丰富的事件回调,开发者可以根据用户的交互行为来执行相应的操作。比如,当用户点击地图上的标记点时,开发者可以通过事件回调来实现弹出详情信息或执行其他特定操作。 总之,Flutter百度地图是一款强大的地图应用开发工具,可以帮助开发者快速构建出高质量的跨平台地图应用。无论是需要简单的地图展示,还是复杂的路线规划,Flutter百度地图都能满足开发者的需求。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值