Flutter地图控制插件google_maps_controller的使用
Flutter地图控制插件google_maps_controller的使用
google_maps_controller
是一个用于 Google Maps
的状态管理控制器插件,它允许你管理标记(Markers)、圆圈(Circles)、多段线(Polylines)和多边形(Polygons)。此插件受到 map_controller
插件的启发,适用于 flutter_map
。
开始使用
请按照 google_maps_flutter
的配置步骤进行设置。
使用方法
使用 GoogleMaps
小部件代替 GoogleMap
以使用自动设置的小部件。使用 GoogleMapsController
来执行所有操作。你可以通过提供者(provider)、继承小部件(InheritedWidget)、BLoC 或其他状态管理工具来提供控制器。
下面是一个完整的示例 DEMO:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_controller/google_maps_controller.dart';
void main() {
runApp(ExampleApp());
}
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Google Maps Controller Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
body: HomeScreen(),
),
);
}
}
class HomeScreen extends StatefulWidget {
HomeScreen({Key? key}) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final s = "Map 2";
late final GoogleMapsController controller;
late final StreamSubscription<CameraPosition> subscription;
CameraPosition? position;
@override
void initState() {
super.initState();
// 初始化地图控制器
controller = GoogleMapsController(
initialCameraPosition: CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962), // 初始位置
zoom: 14.4746, // 初始缩放级别
),
onTap: (latlng) {
// 点击地图时添加一个圆圈
Circle circle = Circle(
circleId: CircleId("ID:" + DateTime.now().millisecondsSinceEpoch.toString()),
center: latlng,
fillColor: Color.fromRGBO(255, 0, 0, 1),
strokeColor: Color.fromRGBO(155, 0, 0, 1),
radius: 5,
onTap: () => controller.removeCircle(circle), // 点击圆圈时移除它
consumeTapEvents: true,
);
controller.addCircle(circle);
},
);
// 监听相机移动事件并更新位置
subscription = controller.onCameraMove$.listen((e) {
setState(() {
position = e;
});
});
}
@override
void dispose() {
subscription.cancel(); // 取消订阅
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Expanded(
child: GoogleMaps(
controller: controller, // 绑定控制器
),
),
SafeArea(
top: false,
child: Text(position?.toString() ?? '移动地图'), // 显示当前相机位置
)
],
);
}
}
在上面的代码中:
- 我们创建了一个
GoogleMapsController
实例,并设置了初始相机位置。 - 在点击地图时添加一个圆圈,并且点击圆圈时会移除它。
- 监听相机移动事件,并将当前相机位置显示在屏幕上。
示例演示图
许可证
MIT 许可证。
API
完整文档可以查看 这里。
GoogleMapsController
GoogleMapsController({
void Function(GoogleMapController) onMapCreated,
void Function() onCameraIdle,
void Function(CameraPosition) onCameraMove,
void Function() onCameraMoveStarted,
void Function(LatLng) onLongPress,
void Function(LatLng) onTap,
CameraPosition initialCameraPosition,
Set<Circle> initialCircles,
Set<Marker> initialMarkers,
Set<Polygon> initialPolygons,
Set<Polyline> initialPolylines,
bool buildingsEnabled,
CameraTargetBounds cameraTargetBounds,
bool compassEnabled,
bool indoorViewEnabled,
bool liteModeEnabled,
bool zoomControlsEnabled,
bool mapToolbarEnabled,
MapType mapType,
MinMaxZoomPreference minMaxZoomPreference,
bool myLocationEnabled,
bool myLocationButtonEnabled,
EdgeInsets padding,
bool rotateGesturesEnabled,
bool scrollGesturesEnabled,
bool tiltGesturesEnabled,
bool trafficEnabled,
bool zoomGesturesEnabled,
List<Factory<OneSequenceGestureRecognizer>> gestureRecognizers,
});
GoogleMaps
GoogleMaps({
@required GoogleMapsController controller,
})
更多关于Flutter地图控制插件google_maps_controller的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图控制插件google_maps_controller的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用google_maps_controller
插件来控制Google地图的示例代码。这个插件允许你与Google地图进行交互,比如改变地图的中心点、缩放级别、添加标记等。
首先,确保你已经在pubspec.yaml
文件中添加了google_maps_flutter
依赖,因为google_maps_controller
实际上是google_maps_flutter
提供的一个功能:
dependencies:
flutter:
sdk: flutter
google_maps_flutter: ^2.1.0 # 请检查最新版本号
然后,你可以按照以下步骤在你的Flutter项目中实现地图控制:
- 创建Flutter项目并导入必要的包:
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
- 定义地图控制器和状态:
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
late GoogleMapController _controller;
final LatLng _initialCameraPosition = LatLng(-34.397, 150.644);
CameraPosition _cameraPosition = CameraPosition(
target: _initialCameraPosition,
zoom: 11.0,
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Maps Controller Example'),
),
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: _cameraPosition,
onMapCreated: (GoogleMapController controller) {
_controller = controller;
_updateCameraPosition();
},
markers: Set<Marker>.of([
Marker(
position: _initialCameraPosition,
infoWindow: InfoWindow(title: 'Sydney'),
),
]),
),
floatingActionButton: FloatingActionButton(
onPressed: () => _moveCamera(),
tooltip: 'Move Camera',
child: Icon(Icons.navigate),
),
);
}
void _updateCameraPosition() async {
// 可以在这里更新地图的初始位置或其他设置
// 例如,获取用户位置后更新
}
void _moveCamera() async {
final LatLng newPosition = LatLng(-37.8136, 144.9631); // 墨尔本的坐标
final CameraPosition newCameraPosition = CameraPosition(
target: newPosition,
zoom: 14.0,
);
await _controller.animateCamera(CameraUpdate.newCameraPosition(newCameraPosition));
}
}
- 运行应用:
确保你已经设置了Google Maps API密钥,并且已经在AndroidManifest.xml
和Info.plist
中进行了相应的配置。
这个示例展示了如何使用google_maps_flutter
插件的GoogleMapController
来控制地图的视图。你可以通过点击浮动操作按钮来移动地图的摄像头到新的位置。
请注意,实际应用中你可能需要处理更多的地图交互,比如添加多个标记、处理地图点击事件、显示路线等。这些都可以通过google_maps_flutter
插件提供的API来实现。