reason

百度定位逻辑

......@@ -89,24 +89,9 @@ Future<void> main() async {
/// 动态申请定位权限
requestPermission();
LocationFlutterPlugin myLocPlugin = LocationFlutterPlugin();
/// 设置用户是否同意SDK隐私协议
/// since 3.1.0 开发者必须设置
BMFMapSDK.setAgreePrivacy(true);
myLocPlugin.setAgreePrivacy(true);
// 百度地图sdk初始化鉴权
if (Platform.isIOS) {
myLocPlugin.authAK('rMsgMvYERM9zHDDdaipk34oBx7yoaGQh');
BMFMapSDK.setApiKeyAndCoordType(
'rMsgMvYERM9zHDDdaipk34oBx7yoaGQh', BMF_COORD_TYPE.BD09LL);
} else if (Platform.isAndroid) {
// Android 目前不支持接口设置Apikey,
// 请在主工程的Manifest文件里设置,详细配置方法请参考官网(https://lbsyun.baidu.com/)demo
BMFMapSDK.setCoordType(BMF_COORD_TYPE.BD09LL);
}
}
class MyApp extends StatelessWidget {
......
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:Parlando/routers/fluro_navigator.dart';
import 'package:Parlando/util/toast_utils.dart';
import 'package:Parlando/widgets/my_button.dart';
import 'package:Parlando/widgets/search_bar.dart';
import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart';
import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart';
import '../../map/flutter_2d_amap.dart';
import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart';
import 'package:flutter_bmflocation/flutter_bmflocation.dart';
import '../../map/interface/amap_2d_controller.dart';
import '../../map/poi_search_model.dart';
......@@ -22,7 +23,9 @@ class AddressSelectPageState extends State<AddressSelectPage> {
int _index = 0;
final ScrollController _controller = ScrollController();
AMap2DController? _aMap2DController;
late BMFMapController myMapController;
late BMFMapController _myMapController;
BaiduLocation _loationResult = BaiduLocation();
LocationFlutterPlugin myLocPlugin = LocationFlutterPlugin();
@override
void dispose() {
......@@ -33,27 +36,115 @@ class AddressSelectPageState extends State<AddressSelectPage> {
@override
void initState() {
super.initState();
// TODO 需要根据项目单独设置keys
Flutter2dAMap.setApiKey(
iOSKey: 'd94fbf50f5bfa86cd4e793c9ed4a9a97',
);
myLocPlugin.setAgreePrivacy(true);
// 百度地图sdk初始化鉴权
if (Platform.isIOS) {
myLocPlugin.authAK('rMsgMvYERM9zHDDdaipk34oBx7yoaGQh');
BMFMapSDK.setApiKeyAndCoordType(
'rMsgMvYERM9zHDDdaipk34oBx7yoaGQh', BMF_COORD_TYPE.BD09LL);
///接受定位回调
myLocPlugin.singleLocationCallback(callback: (BaiduLocation result) {
setState(() {
_loationResult = result;
locationFinish();
});
});
} else if (Platform.isAndroid) {
// Android 目前不支持接口设置Apikey,
// 请在主工程的Manifest文件里设置,详细配置方法请参考官网(https://lbsyun.baidu.com/)demo
BMFMapSDK.setCoordType(BMF_COORD_TYPE.BD09LL);
myLocPlugin.seriesLocationCallback(callback: (BaiduLocation result) {
setState(() {
_loationResult = result;
locationFinish();
myLocPlugin.stopLocation();
});
});
}
///设置定位参数
_locationAction();
_startLocation();
}
void _locationAction() async {
Map iosMap = initIOSOptions().getMap();
Map androidMap = initAndroidOptions().getMap();
await myLocPlugin.prepareLoc(androidMap, iosMap);
}
///定位完成添加mark
void locationFinish() {
/// 创建BMFMarker
BMFMarker marker = BMFMarker.icon(
position: BMFCoordinate(
_loationResult.latitude ?? 0.0, _loationResult.longitude ?? 0.0),
title: 'flutterMaker',
identifier: 'flutter_marker',
icon: 'assets/images/map/icon_mark.png');
print(_loationResult.latitude.toString() +
_loationResult.longitude.toString());
/// 添加Marker
_myMapController.addMarker(marker);
///设置中心点
_myMapController.setCenterCoordinate(
BMFCoordinate(
_loationResult.latitude ?? 0.0, _loationResult.longitude ?? 0.0),
false);
}
/// 设置地图参数
BaiduLocationAndroidOption initAndroidOptions() {
BaiduLocationAndroidOption options = BaiduLocationAndroidOption(
coorType: 'bd09ll',
locationMode: BMFLocationMode.hightAccuracy,
isNeedAddress: true,
isNeedAltitude: true,
isNeedLocationPoiList: true,
isNeedNewVersionRgc: true,
isNeedLocationDescribe: true,
openGps: true,
locationPurpose: BMFLocationPurpose.sport,
coordType: BMFLocationCoordType.bd09ll);
return options;
}
BaiduLocationIOSOption initIOSOptions() {
BaiduLocationIOSOption options = BaiduLocationIOSOption(
coordType: BMFLocationCoordType.bd09ll,
BMKLocationCoordinateType: 'BMKLocationCoordinateTypeBMK09LL',
desiredAccuracy: BMFDesiredAccuracy.best);
return options;
}
/// 启动定位
Future<void> _startLocation() async {
if (Platform.isIOS) {
await myLocPlugin
.singleLocation({'isReGeocode': true, 'isNetworkState': true});
} else if (Platform.isAndroid) {
await myLocPlugin.startLocation();
}
}
/// 创建完成回调
void onBMFMapCreated(BMFMapController controller) {
myMapController = controller;
_myMapController = controller;
/// 地图加载回调
myMapController.setMapDidLoadCallback(callback: () {
print('mapDidLoad-地图加载完成');
});
_myMapController.setMapDidLoadCallback(callback: () {});
}
/// 设置地图参数
BMFMapOptions initMapOptions() {
BMFMapOptions mapOptions = BMFMapOptions(
center: BMFCoordinate(39.917215, 116.380341),
zoomLevel: 12,
zoomLevel: 18,
);
return mapOptions;
}
......@@ -77,7 +168,9 @@ class AddressSelectPageState extends State<AddressSelectPage> {
Expanded(
flex: 9,
child: BMFMapWidget(
onBMFMapCreated: onBMFMapCreated,
onBMFMapCreated: (BMFMapController controller) {
onBMFMapCreated(controller);
},
mapOptions: initMapOptions(),
),
),
......
......@@ -405,6 +405,20 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.1"
flutter_baidu_mapapi_search:
dependency: "direct main"
description:
name: flutter_baidu_mapapi_search
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.0"
flutter_baidu_mapapi_utils:
dependency: "direct main"
description:
name: flutter_baidu_mapapi_utils
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.2.0"
flutter_blurhash:
dependency: transitive
description:
......
......@@ -125,6 +125,8 @@ dependencies:
google_fonts: ^3.0.1
wakelock: ^0.6.1+2
flutter_baidu_mapapi_map: ^3.2.1
flutter_baidu_mapapi_utils: ^3.2.0
flutter_baidu_mapapi_search: ^3.2.0
flutter_bmflocation: ^3.2.0
dependency_overrides:
......@@ -209,6 +211,7 @@ flutter:
- assets/images/category/
- assets/images/membership/
- assets/images/share/
- assets/images/map/
- assets/data/
- assets/video/
- assets/data/Data.json
......