Flutter地图服务插件flutter_dhl_amap的使用
Flutter地图服务插件flutter_dhl_amap的使用
开始使用
flutter_dhl_amap
是一个用于在 Flutter 应用中集成高德地图服务的插件。通过该插件,开发者可以轻松实现地图显示、定位、标注等功能。
初始化插件
首先,确保在 main()
函数中正确初始化插件并设置高德地图的 API Key。API Key 是调用高德地图服务的必要凭证。
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
var _result = "";
var m_key = 0;
late DHL_aMapView dhl_aMapView;
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
new FlutterDhlAmap();
FlutterDhlAmap.setInit("5a7ad9d014cfe8083741e895cfc15ee2"); // 初始化插件并设置高德地图 API Key
FlutterDhlAmap.startLocation(DHL_AMapLocationOption( // 设置定位参数
interval: 10000,
onceLocationLatest: true,
locationCacheEnable: false,
allowsBackgroundLocationUpdates: true,
locationTimeout: 2,
reGeocodeTimeout: 2,
)); // 开始定位
FlutterDhlAmap.onLocationUpate.listen((DHL_Location_Model data) {
if (!mounted) return;
print(data.formattedAddress);
dhl_aMapView.SetCoordinate(data.lat, data.lon); // 定位成功后设置地图中心
dhl_aMapView.SetMymarkerContent(data.lat.toString(), data.lon.toString());
setState(() {
m_key++;
_result = data.formattedAddress;
});
});
FlutterDhlAmap.onLocationUpate_Measure.listen((List<DHL_Measure_Model> data) { // 计算两个坐标的回调
List<DHL_Measure_Model> dat = data;
});
initPlatformState();
}
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion = await FlutterDhlAmap.platformVersion;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
}
配置地图视图
在 build()
方法中配置地图视图,并添加必要的功能按钮。
[@override](/user/override)
Widget build(BuildContext context) {
dhl_aMapView = DHL_aMapView(dhlAMapViewModel: DHL_aMapView_Model(
setZoomControlsEnabled: true,
setCompassEnabled: true,
setMyLocationButtonEnabled: true,
setScaleControlsEnabled: true,
setZoomGesturesEnabled: true,
));
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Row(
children: <Widget>[
RaisedButton(
onPressed: () async {
dhl_aMapView.AddMarker(22.160258, 113.347154, "标题", "内容", "0", true); // 添加标注
dhl_aMapView.UpdateMarker(22.160257, 113.347154, "更新到了", "更新到了", "0"); // 更新标注
FlutterDhlAmap.Calculation_location(22.160258, 113.347154, 23.697839, 113.0441, 1); // 计算两点距离
// Map<dynamic, dynamic> dmap = await FlutterDhlAmap.changeLocation(22.160258, 113.347154, "baidu"); // 转换坐标
},
child: Text('Plugin example app:'),
),
RaisedButton(
onPressed: () {
dhl_aMapView.DelMarkerShow("0"); // 删除所有标注
},
child: Text('22222'),
),
],
),
),
body: Center(
child: dhl_aMapView,
),
),
);
}
功能说明
- 定位功能:通过
startLocation
方法启动定位,并监听定位更新事件。 - 添加标注:使用
AddMarker
方法在地图上添加标注。 - 更新标注:使用
UpdateMarker
方法更新已有的标注。 - 删除标注:使用
DelMarkerShow
方法删除所有标注。 - 计算距离:使用
Calculation_location
方法计算两个坐标之间的距离。
完整示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_dhl_amap/DHL_Location.dart';
import 'package:flutter_dhl_amap/DHL_Location_Model.dart';
import 'package:flutter_dhl_amap/Search/DHL_Measure_Model.dart';
import 'package:flutter_dhl_amap/aMap/DHL_aMapView.dart';
import 'package:flutter_dhl_amap/aMap/DHL_aMapView_Model.dart';
import 'package:flutter_dhl_amap/flutter_dhl_amap.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
var _result = "";
var m_key = 0;
late DHL_aMapView dhl_aMapView;
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
new FlutterDhlAmap();
FlutterDhlAmap.setInit("5a7ad9d014cfe8083741e895cfc15ee2"); // 初始化插件并设置高德地图 API Key
FlutterDhlAmap.startLocation(DHL_AMapLocationOption( // 设置定位参数
interval: 10000,
onceLocationLatest: true,
locationCacheEnable: false,
allowsBackgroundLocationUpdates: true,
locationTimeout: 2,
reGeocodeTimeout: 2,
)); // 开始定位
FlutterDhlAmap.onLocationUpate.listen((DHL_Location_Model data) {
if (!mounted) return;
print(data.formattedAddress);
dhl_aMapView.SetCoordinate(data.lat, data.lon); // 定位成功后设置地图中心
dhl_aMapView.SetMymarkerContent(data.lat.toString(), data.lon.toString());
setState(() {
m_key++;
_result = data.formattedAddress;
});
});
FlutterDhlAmap.onLocationUpate_Measure.listen((List<DHL_Measure_Model> data) { // 计算两个坐标的回调
List<DHL_Measure_Model> dat = data;
});
initPlatformState();
}
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion = await FlutterDhlAmap.platformVersion;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
dhl_aMapView = DHL_aMapView(dhlAMapViewModel: DHL_aMapView_Model(
setZoomControlsEnabled: true,
setCompassEnabled: true,
setMyLocationButtonEnabled: true,
setScaleControlsEnabled: true,
setZoomGesturesEnabled: true,
));
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Row(
children: <Widget>[
RaisedButton(
onPressed: () async {
dhl_aMapView.AddMarker(22.160258, 113.347154, "标题", "内容", "0", true); // 添加标注
dhl_aMapView.UpdateMarker(22.160257, 113.347154, "更新到了", "更新到了", "0"); // 更新标注
FlutterDhlAmap.Calculation_location(22.160258, 113.347154, 23.697839, 113.0441, 1); // 计算两点距离
// Map<dynamic, dynamic> dmap = await FlutterDhlAmap.changeLocation(22.160258, 113.347154, "baidu"); // 转换坐标
},
child: Text('Plugin example app:'),
),
RaisedButton(
onPressed: () {
dhl_aMapView.DelMarkerShow("0"); // 删除所有标注
},
child: Text('22222'),
),
],
),
),
body: Center(
child: dhl_aMapView,
),
),
);
}
}
更多关于Flutter地图服务插件flutter_dhl_amap的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图服务插件flutter_dhl_amap的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_dhl_amap
是一个基于高德地图(AMap)的 Flutter 插件,用于在 Flutter 应用中集成高德地图的功能。以下是如何使用 flutter_dhl_amap
的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 flutter_dhl_amap
依赖:
dependencies:
flutter:
sdk: flutter
flutter_dhl_amap: ^版本号
替换 ^版本号
为最新的版本号。
2. 配置 Android 和 iOS 平台
Android
在 android/app/src/main/AndroidManifest.xml
文件中添加高德地图的 API Key 和必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:label="Your App Name"
android:icon="@mipmap/ic_launcher">
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="您的API_KEY" />
</application>
</manifest>
iOS
在 ios/Runner/Info.plist
文件中添加高德地图的 API Key 和必要的权限:
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要访问您的位置以提供定位服务</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>需要访问您的位置以提供定位服务</string>
<key>AMapServices</key>
<dict>
<key>APIKey</key>
<string>您的API_KEY</string>
</dict>
</dict>
3. 初始化插件
在 main.dart
文件中初始化 flutter_dhl_amap
:
import 'package:flutter_dhl_amap/flutter_dhl_amap.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AMap.init('您的API_KEY');
runApp(MyApp());
}
4. 使用地图组件
在应用的某个页面中使用 AMap
组件:
import 'package:flutter/material.dart';
import 'package:flutter_dhl_amap/flutter_dhl_amap.dart';
class MapScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('高德地图'),
),
body: AMap(
initialCameraPosition: CameraPosition(
target: LatLng(39.909, 116.397),
zoom: 15,
),
markers: <Marker>[
Marker(
position: LatLng(39.909, 116.397),
icon: BitmapDescriptor.defaultMarker,
infoWindow: InfoWindow(title: '北京', snippet: '中国首都'),
),
],
onMapCreated: (AMapController controller) {
// 地图创建完成后的回调
},
),
);
}
}
5. 处理权限
确保在应用中处理位置权限请求。可以使用 permission_handler
插件来处理权限请求。
import 'package:permission_handler/permission_handler.dart';
Future<void> requestLocationPermission() async {
var status = await Permission.location.status;
if (!status.isGranted) {
await Permission.location.request();
}
}
6. 其他功能
flutter_dhl_amap
还提供了其他功能,如定位、地理编码、路径规划等。你可以根据需要使用这些功能。
// 获取当前位置
var location = await AMap.getLocation();
print(location);
// 地理编码
var geocode = await AMap.geocode('北京市朝阳区');
print(geocode);
// 路径规划
var route = await AMap.driveRoute(
origin: LatLng(39.909, 116.397),
destination: LatLng(39.904, 116.407),
);
print(route);