Flutter中如何使用amap_flutter_location插件引入高德地图定位功能
在Flutter项目中集成amap_flutter_location插件时遇到问题,按照官方文档配置后依然无法获取高德地图定位。具体表现为:Android端初始化插件时报"PlatformException(定位失败, 缺少定位权限, null)",但已经在AndroidManifest.xml中添加了ACCESS_FINE_LOCATION权限。iOS端则直接闪退无错误提示。请问:
- 是否需要额外申请高德地图的API KEY?
- Android的build.gradle该如何正确配置?
- iOS端需要哪些特殊配置?
- 有没有完整的示例代码可以参考?
2 回复
在Flutter项目中使用amap_flutter_location插件:
- 在pubspec.yaml添加依赖:
dependencies:
amap_flutter_location: ^版本号
- 配置Android和iOS权限
- 初始化定位:
AMapFlutterLocation _locationPlugin = AMapFlutterLocation();
_locationPlugin.startLocation();
- 监听定位结果:
_locationPlugin.onLocationChanged().listen((event) {
// 处理定位数据
});
更多关于Flutter中如何使用amap_flutter_location插件引入高德地图定位功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中使用 amap_flutter_location 插件集成高德地图定位功能,步骤如下:
1. 添加依赖
在 pubspec.yaml 文件中添加依赖:
dependencies:
amap_flutter_location: ^3.0.0 # 检查最新版本
运行 flutter pub get 安装插件。
2. 配置平台权限
Android 配置:
- 在
android/app/src/main/AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- 在高德开放平台申请 Android API Key,并在
AndroidManifest.xml的<application>标签内配置:
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你的Android_API_KEY" />
iOS 配置:
- 在
ios/Runner/Info.plist中添加位置权限描述:
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要定位权限以提供位置服务</string>
- 在高德平台申请 iOS API Key,在
Info.plist中配置:
<key>MAMapApiKey</key>
<string>你的iOS_API_KEY</string>
3. 代码实现
import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:amap_flutter_location/amap_location_option.dart';
import 'package:permission_handler/permission_handler.dart';
class LocationService {
final AMapFlutterLocation _location = AMapFlutterLocation();
// 初始化定位配置
void initLocation() {
// 设置定位参数
AMapLocationOption locationOption = AMapLocationOption(
needAddress: true, // 需要地址信息
geoLanguage: GeoLanguage.ZH, // 中文地址
);
_location.setLocationOption(locationOption);
// 监听定位结果
_location.onLocationChanged().listen((AMapLocation location) {
if (location.latitude != null && location.longitude != null) {
print("纬度: ${location.latitude}, 经度: ${location.longitude}");
print("地址: ${location.formattedAddress}");
}
});
}
// 开始定位
Future<void> startLocation() async {
// 检查权限(需添加 permission_handler 插件)
if (await Permission.location.request().isGranted) {
_location.startLocation();
}
}
// 停止定位
void stopLocation() {
_location.stopLocation();
}
// 销毁资源
void dispose() {
_location.destroy();
}
}
4. 使用示例
在页面中调用:
LocationService _locationService = LocationService();
@override
void initState() {
super.initState();
_locationService.initLocation();
_locationService.startLocation();
}
@override
void dispose() {
_locationService.dispose();
super.dispose();
}
注意事项:
- 确保高德平台申请的 API Key 与应用包名匹配。
- 真机测试定位功能,模拟器可能无法获取位置。
- 按需处理权限拒绝情况,引导用户开启权限。
通过以上步骤即可在 Flutter 中快速集成高德定位功能。

