美文网首页FlutterFlutter开发圈
Flutter 高德地图Plugin

Flutter 高德地图Plugin

作者: Air_w | 来源:发表于2020-08-31 17:12 被阅读0次

    ai_amap

    |:-|

    | totem |
    English Document 中文文档

    Effect

    地图.jpg
    定位.jpg
    导航.jpg
    导航.jpg

    1.安装

    使用当前包作为依赖库

    1. 依赖此库

    在文件 'pubspec.yaml' 中添加

    [图片上传失败...(image-6a929e-1595506401693)]

    
    dependencies:
    
      ai_amap: ^version
    
    

    或者以下方式依赖

    dependencies:
    
      # ai_amap package.
      ai_amap:
        git:
          url: https://github.com/pdliuw/ai_amap.git
    
    

    2. 安装此库

    你可以通过下面的命令行来安装此库

    
    $ flutter pub get
    
    
    

    你也可以通过项目开发工具通过可视化操作来执行上述步骤

    3. 导入此库

    现在,在你的Dart编辑代码中,你可以使用:

    
    import 'package:ai_amap/ai_amap.dart';
    
    

    2.使用

    使用'地图'需要动态申请权限,动态权限推荐:permission_handler

    配置权限

    <details>
    <summary>Android</summary>

    
        <!--
        地图SDK(包含其搜索功能)需要的基础权限
        -->
    
        <!--允许程序打开网络套接字-->
        <uses-permission android:name="android.permission.INTERNET" />
        <!--允许程序设置内置sd卡的写权限-->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!--允许程序获取网络状态-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!--允许程序访问WiFi网络信息-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!--允许程序读写手机状态和身份-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
        <!--
        地图定位需要的权限
        -->
    
        <!--用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <!--用于访问GPS定位-->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <!--用于访问网络,网络定位需要上网-->
        <uses-permission android:name="android.permission.INTERNET"/>
        <!--用于读取手机当前的状态-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
        <!--用于写入缓存数据到扩展存储卡-->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <!--用于申请调用A-GPS模块-->
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    
        <!--
        导航所需权限
        -->
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
    
    
        <application>
        
        ...    
    
            <meta-data
                android:name="com.amap.api.v2.apikey"
                android:value="${apiKey}" />
            <!--
            https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation
            (请在application标签中声明service组件,每个app拥有自己单独的定位service。)
            -->
            <service android:name="com.amap.api.location.APSService"></service>
    
            <!--
            地图导航组件
            -->
            <activity android:name="com.amap.api.navi.AmapRouteActivity"
                android:theme="@android:style/Theme.NoTitleBar"
                android:configChanges="orientation|keyboardHidden|screenSize" />
    
        </application>
    
    

    </details>

    <details>
    <summary>iOS</summary>

    
        <key>NSFileProviderPresenceUsageDescription</key>
        <string>使用时允许访问文件</string>
        <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
        <string>始终允许定位(提高后台定位准确率)</string>
        <key>NSLocationAlwaysUsageDescription</key>
        <string>使用时始终允许定位</string>
        <key>NSLocationWhenInUseUsageDescription</key>
        <string>使用时允许定位</string>
    
    
    

    ** 为提高iOS定位成功率,请打开-->'Background Modes' --> 勾选☑ ️'Location Updates' **

    iOS支持PlatformView配置:

        
        <key>io.flutter.embedded_views_preview</key>
        <true/>
        
    

    </details>

    1.使用'地图'的地方中:

    • 1、使用地图Widget
        //map widget
        _aMapWidget = AiAMapLocationPlatformWidget(
          platformWidgetController: _locationController,
        );
    
    
    • 2、使用地图Controller
    
        _locationController = AiAMapLocationPlatformWidgetController(
          locationResultCallback:
              (AiAMapLocationResult locationResult, bool isSuccess) {
            setState(() {
              _currentState = "定位:$isSuccess";
            });
    
            if (locationResult.haveAddress()) {
              _locationController.stopLocation();
    
              setState(() {
                if (widget._locationResultTest != null) {
                  widget._locationResultTest(locationResult, isSuccess);
                }
                _locationAddress = locationResult.address;
              });
    
            }
          },
          platformViewCreatedCallback: (int id) {
            setState(() {
              //1、ApiKey
              AiAMapLocationPlatformWidgetController.setApiKey(
                  apiKey: "$_yourPrimaryKey");
              //2、初始化定位服务
              _locationController..recreateLocationService();
              _locationController.startLocation();
              setState(() {
                _currentState = "开始定位";
              });
            });
          },
    
    

    flutter开发者项目示例:

    flutter_app_sample 帮助flutter开发者更快入门、精进,避免不必要的技术坑。
    如果您觉得此项目对您有所帮助,也可以"star"一下,我们得到您的鼓励后会更有动力持续推出更多有益于您的技术示例

    特征:

    • 本项目是主打技术示例,所以涉及到的需求会比较少,涉及到的技术会比较多
    • 本项目是为flutter开发者专门打造的“Api demo app”
    • 本项目不仅包含flutter 各种widget组件,还包含开发包、插件,以及与各平台platforms交互、通信(Platform Channel)的技术示例。
    • 移步查看更多特征......

    相关文章

      网友评论

        本文标题:Flutter 高德地图Plugin

        本文链接:https://www.haomeiwen.com/subject/opqpsktx.html