在Flutter中实现地图功能,主要通过第三方地图插件实现,以下是常用方案:
主要地图插件
1. google_maps_flutter(谷歌地图)
dependencies:
google_maps_flutter: ^2.2.0
基本使用:
import 'package:google_maps_flutter/google_maps_flutter.dart';
GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(31.2304, 121.4737), // 上海坐标
zoom: 14,
),
markers: {
Marker(
markerId: MarkerId('marker_1'),
position: LatLng(31.2304, 121.4737),
infoWindow: InfoWindow(title: '上海'),
),
},
)
2. mapbox_gl(Mapbox地图)
dependencies:
mapbox_gl: ^1.0.0
3. flutter_baidu_mapapi(百度地图)
适用于中国地区
完整示例代码
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MapPage extends StatefulWidget {
@override
_MapPageState createState() => _MapPageState();
}
class _MapPageState extends State<MapPage> {
GoogleMapController? mapController;
Set<Marker> markers = {};
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('地图示例')),
body: GoogleMap(
onMapCreated: (controller) {
setState(() {
mapController = controller;
});
},
initialCameraPosition: CameraPosition(
target: LatLng(39.9042, 116.4074), // 北京
zoom: 12,
),
markers: markers,
onTap: (LatLng position) {
setState(() {
markers.add(Marker(
markerId: MarkerId('marker_${markers.length}'),
position: position,
));
});
},
),
);
}
}
平台配置要点
Android配置
- 在
AndroidManifest.xml 中添加API密钥
- 配置位置权限
iOS配置
- 在
Info.plist 中添加位置权限描述
- 在
AppDelegate.swift 中配置API密钥
功能扩展
- 实时定位
- 路径规划
- 地理编码/反编码
- 自定义地图样式
选择插件时考虑因素:地区支持、功能需求、性能要求和商业许可。