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

Flutter获取坐标后无法刷新GoogleMap的问题该如何解决?

问题根因

GoogleMap组件的initialCameraPosition属于一次性初始化参数,仅在组件首次构建挂载时生效,后续你通过setState修改_lat、_lng、_zoom变量不会触发地图相机位置更新,所以会出现变量值已更新但地图无变化的情况。

解决方法

你需要通过GoogleMapController主动操控地图更新,按以下步骤修改代码即可:

  1. 先在State类中声明地图控制器成员变量
GoogleMapController? _mapController;
  1. 给GoogleMap组件添加onMapCreated回调,存储控制器实例
Container(
  width: 350,
  height: 350,
  child: GoogleMap(
      markers: Set<Marker>.of(_markers),
      mapType: MapType.satellite,
      // 新增onMapCreated回调
      onMapCreated: (controller) => _mapController = controller,
      initialCameraPosition:
          CameraPosition(zoom: _zoom, target: LatLng(_lat, _lng))),
),
  1. 在saveGps方法的setState执行完成后,调用控制器方法更新地图相机位置
void saveGps() async {
  DateTime now = DateTime.now();
  var timezoneOffset = now.timeZoneOffset;
  Prefs.cityName = _cityName;
  Prefs.offset = timezoneOffset.inMinutes / 60;

  setState(() {
    _lat = Prefs.lat = _position.latitude;
    _lng = Prefs.lng = _position.longitude;
    _markers.clear();
    _markers.add(Marker(
        markerId: MarkerId(Prefs.cityName),
        position: LatLng(Prefs.lat, Prefs.lng),
        infoWindow: InfoWindow(
          title: Prefs.cityName,
        )));
    _zoom = 17;
  });

  // 新增相机位置更新逻辑,做空判断避免空指针报错
  if (_mapController != null) {
    _mapController!.moveCamera(
      CameraUpdate.newCameraPosition(
        CameraPosition(target: LatLng(_lat, _lng), zoom: _zoom),
      ),
    );
  }
}

补充说明

你当前的Marker更新逻辑是正确的,只要_markers是State类的成员变量,setState修改后Marker会自动同步更新到地图上,不需要额外调整。

内容的提问来源于stack exchange,提问作者Bhikkhu Subhuti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:03