Flutter google_maps_flutter插件onTap触发正常但无法添加标记问题
GoogleMapsFlutter点击地图添加标记不显示修复方案
核心问题原因排查
Marker锚点参数设置错误
你代码中anchor参数传入了Offset(100, 160),该参数为Marker的相对偏移量,取值范围是0~1,代表相对于Marker自身宽高的比例,用于指定Marker的哪个点与你传入的经纬度坐标对齐。传入远大于1的数值会导致Marker直接偏移到地图可视区域之外,表现为标记添加成功但看不到。
默认锚点为Offset(0.5, 1.0),代表Marker底部中心和坐标点对齐,符合常规使用习惯。markers变量定义位置错误
如果你的var markers = Set<Marker>();是写在build方法内部,每次调用setState触发页面重绘时,markers都会被重新初始化为空集合,刚添加的标记会被直接清空。初始缩放级别过低
如果initialCameraPosition没有设置zoom参数,默认缩放级别为0,为全球视图,单个标记尺寸过小也会难以识别。
修复后的代码示例
import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'dart:async'; class MapPage extends StatefulWidget { const MapPage({super.key}); @override State<MapPage> createState() => _MapPageState(); } class _MapPageState extends State<MapPage> { // 将markers定义为State类的成员属性,不要放在build方法内 final Set<Marker> markers = <Marker>{}; final Completer<GoogleMapController> _mapController = Completer(); // 替换为你的实际初始定位坐标 final LatLng currentLocation = const LatLng(39.9042, 116.4074); @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ Positioned.fill( child: GoogleMap( onTap: (LatLng point) { print(point.longitude.toString()); final snackBar = SnackBar( content: Text(point.longitude.toString()), action: SnackBarAction( label: 'Undo', onPressed: () { // 可选:实现撤销添加标记逻辑 setState(() { markers.removeWhere((marker) => marker.markerId == MarkerId(point.toString())); }); }, ), ); ScaffoldMessenger.of(context).showSnackBar(snackBar); setState(() { markers.add(Marker( markerId: MarkerId(point.toString()), position: point, infoWindow: InfoWindow( title: 'I am a marker in ${point}', ), icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueMagenta), // 修正锚点为合理取值 anchor: const Offset(0.5, 1.0), )); }); }, myLocationEnabled: true, zoomControlsEnabled: false, markers: markers, initialCameraPosition: CameraPosition( target: currentLocation, // 添加初始缩放级别,14为城市街道级视图 zoom: 14, ), onMapCreated: (GoogleMapController controller) { _mapController.complete(controller); }, ), ), ], ), ); } }
内容的提问来源于stack exchange,提问作者cubanGuy
相关产品推荐
相关产品推荐

