You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web中基于google_maps实现地图点击添加及删除标记点

实现Flutter Web谷歌地图点击添加标记点

可以实现地图点击添加标记点的功能,核心思路是利用原生Google Maps JavaScript API的点击事件监听——因为google_maps插件本身就是对JS API的封装,所以可以直接给地图实例绑定点击事件,在回调中创建并添加标记点。

修改后的完整代码如下:

import 'dart:ui' as ui;
import 'package:google_maps/google_maps.dart';
import 'package:flutter/material.dart';
import 'dart:html' as html;

Widget getMap() {
  // 唯一ID用于命名div元素
  String htmlId = "6";
  // 创建Web视图
  //ignore: undefined_prefixed_name
  ui.platformViewRegistry.registerViewFactory(htmlId, (int viewId) {
    final latLang = LatLng(18.508682857887514, 73.79985281545117);

    final mapOptions = MapOptions()
      ..zoom = 11
      ..tilt = 90
      ..center = latLang;
    final elem = html.DivElement()
      ..id = htmlId
      ..style.width = "100%"
      ..style.height = "100%"
      ..style.border = "none";

    final map = GMap(elem, mapOptions);
    
    // 初始添加的标记点
    Marker(MarkerOptions()
      ..position = latLang
      ..map = map
      ..title = '初始位置');
    Marker(MarkerOptions()
      ..position = LatLng(18.52362694783254, 73.87910089845153)
      ..map = map
      ..title = '初始位置');
    Marker(MarkerOptions()
      ..position = LatLng(18.6206091576794, 73.91171656176442)
      ..map = map
      ..title = '初始位置');

    // 绑定地图点击事件,添加标记点
    map.onClick.listen((MouseEvent event) {
      if (event.latLng != null) {
        Marker(MarkerOptions()
          ..position = event.latLng!
          ..map = map
          ..title = '点击添加的位置');
      }
    });

    return elem;
  });
  // 创建Flutter Web的平台视图
  return HtmlElementView(
    viewType: htmlId,
  );
}

关键说明:

  • 通过map.onClick.listen监听地图的点击事件,回调参数MouseEvent包含了点击位置的latLng坐标。
  • 每次点击时,判断latLng不为空后,直接创建新的Marker实例并关联到当前地图,即可完成点击添加标记点的功能。
  • 该方法依赖google_maps插件的原生JS API封装,无需额外插件支持,是当前可行的实现方案。

内容的提问来源于stack exchange,提问作者Nayana Jangale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:45:37