1、先在百度地图官网申请百度地图AK?百度地图开放平台 | 百度地图API SDK | 地图开发
2、安装flutter百度地图插件
#百度定位
flutter_bmflocation: ^1.0.4
#权限申请
permission_handler: ^5.1.0
3、?配置AndroidManifest.xml
<!--这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 用于访问wifi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="百度地图ak" />
4、主要代码:
import 'package:flutter/material.dart';
//消息提示
import 'package:fluttertoast/fluttertoast.dart';
import 'package:flutter_bmflocation/bdmap_location_flutter_plugin.dart';
import 'package:flutter_bmflocation/flutter_baidu_location.dart';
import 'package:flutter_bmflocation/flutter_baidu_location_android_option.dart';
import 'package:flutter_bmflocation/flutter_baidu_location_ios_option.dart';
class _DetailItemLocationState extends State<DetailItemLocation> {
LocationFlutterPlugin _locationPlugin = new LocationFlutterPlugin();
//ios定位参数设置
BaiduLocationIOSOption iosOption = new BaiduLocationIOSOption();
BaiduLocationAndroidOption androidOption = new BaiduLocationAndroidOption();
BaiduLocation _baiduLocation;
var _locationListener;
@override
void initState() {
super.initState();
/// 设置ios端ak
LocationFlutterPlugin.setApiKey("百度地图ak");
_locationListener =
_locationPlugin.onResultCallback().listen((Map<String, Object> result) {
setState(() {
try {
_baiduLocation = BaiduLocation.fromMap(result);
print(_baiduLocation);//定位的结果
... //这边写你定位后的处理逻辑
_stopLocation(); //可以不要,不要的话是隔一段时间定位一次(根据你的参数配置),
} catch (e) {
print(e);
}
});
});
}
@override
void dispose() {
super.dispose();
//组件销毁取消监听
if (null != _locationListener) {
_locationListener.cancel();
}
}
// 设置定位参数
void _setLocOption(){
androidOption.setCoorType("bd09ll"); // 设置返回的位置坐标系类型
androidOption.setIsNeedAltitude(true); // 设置是否需要返回海拔高度信息
androidOption.setIsNeedAddres(true); // 设置是否需要返回地址信息
androidOption.setIsNeedLocationPoiList(true); // 设置是否需要返回周边poi信息
androidOption.setIsNeedNewVersionRgc(true); // 设置是否需要返回最新版本rgc信息
androidOption.setIsNeedLocationDescribe(true); // 设置是否需要返回位置描述
androidOption.setOpenGps(true); // 设置是否需要使用gps
androidOption.setLocationMode(LocationMode.Hight_Accuracy); // 设置定位模式
androidOption.setScanspan(1000); // 设置发起定位请求时间间隔
Map androidMap = androidOption.getMap();
Map iosdMap = iosOption.getMap();
_locationPlugin.prepareLoc(androidMap,iosdMap); //ios和安卓定位设置
}
// 开始定位
void _startLocation(){
if (null != _locationPlugin) {
//申请定位权限
requestPermission().then((value)=>{
if(value){
_setLocOption(),
_locationPlugin.startLocation()
}else {
Fluttertoast.showToast(msg: '需要定位权限!')
}
});
}
}
// 申请权限
Future<bool> requestPermission() async {
// 申请权限
final status = await Permission.location.request();
if (status.isGranted) {
print("定位权限申请通过");
return true;
} else {
print("定位权限申请不通过");
return false;
}
}
/// 停止定位
void _stopLocation() {
if (null != _locationPlugin) {
_locationPlugin.stopLocation();
}
}
}
在需要定位的地方调用?_startLocation 方法就可以了
|