首先需要在高德开放平台注册一个用户,并申请一个key和你的项目相关联,地址:https://lbs.amap.com/登录后进入:控制台→应用管理→我的应用→创建新应用→添加key(底下附上流程)
3月11日:更新显示map代码,下面是全部代码
应用名称随便填写,符合规则就行
key名称也是符合规则下随便写;服务平台看自己需求;发布版安全码和调试版安全码SHA1我之前已经介绍过如何获取,有不知道的小伙伴可以前去https://blog.csdn.net/Gemini_Kanon/article/details/104531219参考;PackageName一定要和你自己项目的报名对应上否则无法获取定位信息,如何获取上面有介绍!
最后点击提交等待完成后就能看到你自己的key了~
然后需要在项目中进行一些配置:
1、项目的android→app下的build.gradle:找到对应的地方把这两个配置搞上去(个人最近只做的安卓app,ios系统还未配置)
defaultConfig {
manifestPlaceholders = [
AMAP_KEY : "你自己的key", /// 高德地图key
]
}
dependencies {
implementation 'com.amap.api:location:latest.integration'
}
以下是代码部分:
引入资源文件amap_location:https://pub.dev/packages/amap_location
https://pub.dev/packages/amap_map_fluttify
然后在需要获取定位信息的地方引入相关dart文件:import 'package:amap_location/amap_location.dart';
import 'package:amap_map_fluttify/amap_map_fluttify.dart';
import 'package:flutter/material.dart';
import 'package:amap_location/amap_location.dart';
import 'package:amap_map_fluttify/amap_map_fluttify.dart';
//高德地图获取地理位置
class LocationPage extends StatefulWidget {
LocationPage({Key key}) : super(key : key);
_LocationPageState createState() => _LocationPageState();
}
class _LocationPageState extends State {
double longitude = 0.0;
double latitude = 0.0;
@override
void initState() {
super.initState();
this._getLocation();
}
_getLocation () async {
//启动一下
await AMapLocationClient.startup(new AMapLocationOption(desiredAccuracy: CLLocationAccuracy.kCLLocationAccuracyBest));
//获取地理位置(直接定位)
var result = await AMapLocationClient.getLocation(true);
setState(() {
this.longitude = result.longitude; //经度
this.latitude = result.latitude; //纬度
});
}
@override
void dispose() {
//停止监听定位、销毁定位
AMapLocationClient.stopLocation();
AMapLocationClient.shutdown();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("获取位置信息"),
),
body: Column(
children: [
Center(
child: RaisedButton(
child: Text("获取位置"),
onPressed: (){
_getLocation();
},
),
),
Text("经度:${this.longitude}"),
Text("纬度:${this.latitude}"),
//显示地图
Container(
width: double.infinity,
height: ScreenAdapter.height(300.0),
child: Stack(
children: [
AmapView(
mapType: MapType.Standard,
showZoomControl: false,
zoomLevel: 15,
centerCoordinate: LatLng(this.latitude,this.longitude),
onMapCreated: (controller) async{
await controller.showMyLocation(true);
},
),
],
),
)
],
),
);
}
}
下面是效果:挡住的是我自己测试的数据,懂的人自然懂(/一脸奸笑)
对于Android6.0以上的手机需要手动获取一下定位权限(或者手动到设置里把软件的定位权限打开),否则无法获得定位信息,amap_location网站上有一个获取定位权限的代码,放到自己的代码里报错,整了一会儿没整好,索性我又找了一段获取定位权限的代码,下面贴一下:
首先在你的项目里引入permission_handler,然后在对应文件里引入dart文件就可以了,小编这里直接放到main入口里了,进程序直接打开权限,以后都用得上~
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
void main() => runApp(MyApp());
//温馨提示,这里的MyApp需要继承StatefulWidget才能重写初始化函数
class MyApp extends StatelessWidget {
//这么写会直接报错
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false, //去掉debug图标
initialRoute: "/",
onGenerateRoute: onGenerateRoute,
theme: ThemeData(
//屏幕右滑返回上一页
platform: TargetPlatform.iOS,
),
);
}
}
//改成如下写法
class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State {
@override
void initState() {
super.initState();
this.checkPersmission();
}
void checkPersmission() async {
// 申请权限
Map permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
// 申请结果
PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.location);
if (permission == PermissionStatus.granted) {
//_getLocation();
} else {
bool isOpened = await PermissionHandler().openAppSettings();//打开应用设置
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("111"),
),
body: Center(
child: Text("111"),
),
),
);
}
}
功能实现~