新建 Flutter 项目,使用 Android Studio 打开项目里的 android 工程,或者右键 android 目录-> flutter -> open Android module in Android Studio。
在 Android 工程里,切换为 Android 视图:
打开 build.gradle 文件,添加定位依赖包:
implementation(‘com.amap.api:location:5.2.0‘)
点击 Sync Now 或者 工具栏上的??图标同步依赖包:
打开清单文件AndroidManifest.xml
,配置权限和服务:
<!--访问网络-->
<uses-permission android:name="android.permission.INTERNET" />
<!--粗略定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精确定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<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.READ_PHONE_STATE" />
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/>
高德平台需要签名的 sha1 ,所以需要配置签名文件,debug 模式调试和正式包各需要一个,也可以使用同一个 keystore 。 工具栏 Build -> Generate Signed Bundle / APK -> 选择 APK -> Next -> Create new ,打开 New Key Store 窗口:
key store path 选择当前项目根目录或者你喜欢的任何目录,命名为 debug.keystore 或者你喜欢的名字,两个地方的 Password 可以一样,Alias 需要填写,下面的 Certificate 填写一项即可:
点击 ok -> 点击 Next,选择 debug ,当然如果 debug 和 release 使用同一个签名文件的话也可同时选择 debug 和 release,并勾选 V2 签名:
完成后可以看到项目里的 debug.keystore 文件:
重复上面方法,再创建一个 release.keystore 文件。点击 Project Structure:
选择 Modules -> app -> Signing Configs -> + -> 默认有 debug,再添加一个 release ,分别选择对应的 keystore:
点击 ok 后再次打开 build.gradle 文件,可以看到签名配置对应刚才配置的签名文件:
signingConfigs {
debug {
storeFile file(‘/Users/apple/AndroidStudioProjects/flutter/map_demo/android/debug.keystore‘)
storePassword ‘123456‘
keyAlias ‘amap‘
keyPassword ‘123456‘
}
release {
storeFile file(‘/Users/apple/AndroidStudioProjects/flutter/map_demo/android/release.keytore‘)
storePassword ‘123456‘
keyAlias ‘amap‘
keyPassword ‘123456‘
}
}
打开高德开放平台 | 高德地图API (amap.com),注册成为高德开放平台用户,打开控制台创建一个应用,填入对应的信息,这里有个错误,SHA1 其实是 MD5 ,不要填写 SHA1。
获取MD5: 在刚才的项目里,打开 Terminal,输入下面命令,路径就是 debug.keystore 和 release.keystore的路径:
keytool -list -v -keystore ./debug.keystore
输入秘钥库口令,就是设置的 Password ,复制 MD5 ,去高德开放平台粘贴。
发布版和调试版都设置后,复制 key 。
在清单文件里,配置apikey
:
<!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="f6c46787c43cb7df5510d9f4c530fd1e"/>
回到 Flutter 项目,添加高德定位库和权限申请依赖,执行 pub get
:
amap_flutter_location: ^2.0.0
permission_handler:
在获取定位的入口配置权限申请,注册监听:
/// 动态申请定位权限
requestPermission();
///注册定位结果监听
_locationListener = _locationPlugin
.onLocationChanged()
.listen((Map<String, Object> result) {
setState(() {
_locationResult = result;
});
});
只要获取到定位,这里都会回调,result
包含了很全的定位信息。 如果运行报错:INVALID_USER_KEY
,说明你的 keystore 的 MD5 不正确,也许平台会把 SHA1 改为真正的 SHA1 ,所以不妨试试填入 SHA1。
回到 Android 工程,添加地图依赖:
implementation ‘com.amap.api:3dmap:5.0.0‘
回到 Flutter 工程,在pubspec.yaml
里添加插件依赖:
amap_flutter_map: ^2.0.1
在布局中使用 map :
final AMapWidget map = AMapWidget(
onMapCreated: onMapCreated,
// 定位小蓝点配置
myLocationStyleOptions: MyLocationStyleOptions(true),
// 是否指南针
// compassEnabled: true,
);
我们可以利用 Flutter 官方网站的教程,搭建好环境,写出一些 Demo 示例,在此之后需要了解如何混合开发,“万物皆 Widget”到底怎么理解?对于 State 的理解等原理知识...
这些对我们Android开发来说都有一定的难度。
为了让大家快速无痛上手 Flutter,给大家分享一份阿里大神总结的《Flutter进阶学习笔记》。
整理大纲
为什么Flutter是跨平台开发的终极之选
在Windows上搭建Flutter开发环境
编写您的第一个 Flutter App
Flutter开发环境搭建和调试
Dart语法篇之基础语法(一)
Dart语法篇之集合的使用与源码解析(二)
Dart语法篇之集合操作符函数与源码分析(三)
Dart语法篇之函数的使用(四)
Dart语法篇之面向对象基础(五)
Dart语法篇之面向对象继承和Mixins(六)
Dart语法篇之类型系统与泛型(七)
Flutter中的widget
这是为什么?
跨平台开发
什么是 Flutter
Flutter 的特性
Flutter 构建应用的工具
使用 Flutter 构建的热门应用
构建 Flutter 应用的成本
……
使用镜像
系统要求
获取Flutter SDK
编辑器设置
Android设置
起步: 配置编辑器
起步: 体验
体验热重载
创建新的应用
运行应用程序
……
第1步: 创建 Flutter app
第2步: 使用外部包(package)
第3步: 添加一个 有状态的部件(Stateful widget)
第4步: 创建一个无限滚动ListView
第5步: 添加交互
第6步: 导航到新页面
第7步:使用主题更改UI
……
开发环境的搭建
模拟器的安装与调试
开发环境的搭建
模拟器的安装与调试
……
Hello Dart
数据类型
变量和常量
集合(List、Set、Map)
流程控制
运算符
异常
函数
……
List
Set
Map
Queue
LinkedList
HashMap
Map、HashMap、LinkedHashMap、SplayTreeMap区别
命名构造函数from和of的区别以及使用建议
……
Iterable
Iterable类关系图
Iterable类方法图
forEach
介绍
使用方式
源码解析
map
介绍
使用方式
源码解析
any
介绍
使用方式
源码解析
every
介绍
使用方式
源码解析
where
介绍
使用方式
源码解析
firstWhere和singleWhere和lastWhere
介绍
使用方式
源码解析
join
介绍
使用方式
源码解析
take
介绍
使用方式
源码解析
takeWhile
介绍
使用方式
源码解析
……
函数参数
匿名函数(闭包,lambda)
箭头函数
局部函数
顶层函数和静态函数
main函数
……
属性访问器(accessor)函数setter和getter
面向对象中的变量
构造函数
抽象方法、抽象类和接口
类函数
……
类的单继承
基于Mixins的多继承
……
可选类型
接口类型
泛型
类型具体化
……
Flutter页面-基础Widget
Widget
StatelessWidget
Stateful Widget
State生命周期
基础widget
文本显示
……
特别认同一句话:只有拥抱变化,才能比别人更早发现机会。
没有谁甘愿薪资增长缓慢或一直被无情压榨,或早或晚我们都会走上进阶之路。与其被动接受,不如主动出击,先争取成为技术强+思维深+视野广的工程师,机会来临时才能从容不迫地顺应而上,比别人更快一步。
原文:https://www.cnblogs.com/zhireshini/p/15053889.html