Flutter地图标记插件widget_marker_google_map的使用

发布于 1周前 作者 caililin 来自 Flutter

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

1 回复

更多关于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'),
        ),
      );
    });
  }
}

在这个示例中:

  1. 我们创建了一个MapScreen页面,该页面包含一个Google Map。
  2. 地图的初始视角被设置为旧金山的位置。
  3. 当地图创建完成时(onMapCreated回调),我们添加一个标记到地图上。
  4. 我们还添加了一个浮动操作按钮(FAB),点击该按钮时会在地图上添加另一个标记(例如洛杉矶的位置)。

请确保你的Flutter项目已经正确配置了Google Maps API密钥,以便能够显示地图。这通常涉及在AndroidManifest.xmlInfo.plist文件中添加相应的API密钥配置。

如果你确实在寻找一个名为widget_marker_google_map的特定插件,并且它存在但不在pub.dev上广泛流行,你可能需要查阅该插件的官方文档或仓库以获取具体的用法示例。不过,大多数情况下,google_maps_flutter插件已经足够满足大多数地图和标记的需求。

回到顶部