Flutter地图标记插件widget_marker_google_map的使用
Flutter地图标记插件 widget_marker_google_map
的使用
简介
widget_marker_google_map
是一个在Flutter中使用的Google地图插件,允许你在地图上添加自定义的Widget作为标记。它基于 google_maps_flutter
插件,并扩展了其功能。
项目链接
设置
首先,请按照 google_maps_flutter 文档 中的步骤进行设置和配置。
使用方法
该插件的使用方式与 google_maps_flutter
类似,只是增加了一个 widgetMarkers
参数用于定义地图上的自定义Widget标记。
示例代码
以下是一个完整的示例,展示如何使用 widget_marker_google_map
:
import 'package:flutter/material.dart';
import 'package:widget_marker_google_map/widget_marker_google_map.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({Key? key}) : super(key: key);
static const shibuya = CameraPosition(
bearing: 192.8334901395799,
target: LatLng(35.6598003, 139.7023894),
zoom: 15.151926040649414,
);
static const cafePosition = LatLng(35.659172, 139.7023894);
static const clothesShopPosition = LatLng(35.659528, 139.698723);
static const hamburgerShopPosition = LatLng(35.6614027, 139.6983333);
@override
Widget build(BuildContext context) {
return Scaffold(
body: WidgetMarkerGoogleMap(
initialCameraPosition: shibuya,
mapType: MapType.normal,
widgetMarkers: [
WidgetMarker(
position: cafePosition,
markerId: 'cafe',
widget: Container(
color: Colors.brown,
padding: const EdgeInsets.all(2),
child: const Icon(
Icons.coffee,
color: Colors.white,
size: 64,
),
),
),
WidgetMarker(
position: clothesShopPosition,
markerId: 'clothes',
widget: Container(
color: Colors.green,
padding: const EdgeInsets.all(4),
child: const Text(
'shop',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 32,
),
),
),
),
WidgetMarker(
position: hamburgerShopPosition,
markerId: 'hamburger',
widget: Container(
color: Colors.red,
padding: const EdgeInsets.all(2),
child: const Icon(
Icons.fastfood,
color: Colors.yellow,
size: 64,
),
),
),
],
),
);
}
}
WidgetMarker
类
要使用自定义的Widget标记,需要创建 WidgetMarker
对象并将其添加到 widgetMarkers
列表中。
class WidgetMarker {
WidgetMarker({
required this.position,
required this.markerId,
required this.widget,
this.onTap,
}) : assert(markerId.isNotEmpty);
final LatLng position;
/// Keep this unique, otherwise it will not appear.
final String markerId;
/// Gestures of widget is disabled.
/// Use this callback instead.
final VoidCallback? onTap;
final Widget widget;
}
确保每个 markerId
都是唯一的,否则标记可能不会显示。此外,如果需要处理手势事件,可以使用 onTap
回调函数。
如果有任何问题或请求,请随时在 GitHub 上提出。
更多关于Flutter地图标记插件widget_marker_google_map的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图标记插件widget_marker_google_map的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用widget_marker_google_map
插件来实现地图标记的示例代码。需要注意的是,widget_marker_google_map
可能不是一个真实存在的插件名称,因为Flutter社区中更常用的插件是google_maps_flutter
。不过,基于你的要求,我将模拟一个类似的实现,使用google_maps_flutter
插件来展示如何在地图上添加标记。
首先,确保你已经在pubspec.yaml
文件中添加了google_maps_flutter
依赖:
dependencies:
flutter:
sdk: flutter
google_maps_flutter: ^2.x.x # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中创建一个包含Google Map和标记的页面。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MapScreen(),
);
}
}
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
GoogleMapController? _controller;
Set<Marker> _markers = {};
static final CameraPosition _initialCameraPosition = CameraPosition(
target: LatLng(37.7749, -122.4194), // 默认显示的地图位置,例如旧金山
zoom: 14.0,
);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Map with Markers'),
),
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: _initialCameraPosition,
markers: _markers,
onMapCreated: (GoogleMapController controller) {
_controller = controller;
// 添加一个标记
setState(() {
_markers.add(
Marker(
markerId: MarkerId('marker_id_1'),
position: LatLng(37.7749, -122.4194),
infoWindow: InfoWindow(title: 'San Francisco', snippet: 'USA'),
),
);
});
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 添加另一个标记(通过点击按钮)
_addMarkerWithLatLng(LatLng(34.0522, -118.2437)); // 例如洛杉矶的位置
},
tooltip: 'Add Marker',
child: Icon(Icons.add),
),
);
}
void _addMarkerWithLatLng(LatLng position) {
setState(() {
final MarkerId markerId = MarkerId('marker_${_markers.length + 1}');
_markers.add(
Marker(
markerId: markerId,
position: position,
infoWindow: InfoWindow(title: 'Los Angeles', snippet: 'USA'),
),
);
});
}
}
在这个示例中:
- 我们创建了一个
MapScreen
页面,该页面包含一个Google Map。 - 地图的初始视角被设置为旧金山的位置。
- 当地图创建完成时(
onMapCreated
回调),我们添加一个标记到地图上。 - 我们还添加了一个浮动操作按钮(FAB),点击该按钮时会在地图上添加另一个标记(例如洛杉矶的位置)。
请确保你的Flutter项目已经正确配置了Google Maps API密钥,以便能够显示地图。这通常涉及在AndroidManifest.xml
和Info.plist
文件中添加相应的API密钥配置。
如果你确实在寻找一个名为widget_marker_google_map
的特定插件,并且它存在但不在pub.dev
上广泛流行,你可能需要查阅该插件的官方文档或仓库以获取具体的用法示例。不过,大多数情况下,google_maps_flutter
插件已经足够满足大多数地图和标记的需求。