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

FlutterMap无法拖拽且捏合缩放时显示灰色屏幕问题求助

FlutterMap无法拖拽且捏合缩放时显示灰色屏幕问题求助

大家好,我在Flutter项目里用flutter_map包的时候遇到了个棘手的问题:地图没法拖拽,而且捏合缩放的时候直接变成灰色屏幕了。初始的瓦片加载是正常的,但拖拽、缩放这些交互完全不符合预期。我怀疑是不是外部传入的MapController有问题(因为之后要做动态更新所以必须用外部的),或者是move()方法在拖拽的时候过早重新定位导致的?

环境信息

我的pubspec相关依赖版本如下:

environment:
  sdk: ">=3.7.0 <=3.7.2"
flutter: ^3.29.2
...
flutter_map: ^8.1.1
latlong2: ^0.9.1

相关代码

父组件中初始化MapController并传入的NewGeoMap组件代码:

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:siren_flutter/data/cached_tile_provider.dart';

class NewGeoMap extends StatefulWidget {
  const NewGeoMap({Key? key, required this.mapController}) : super(key: key);

  final MapController mapController;

  @override
  State<NewGeoMap> createState() => _NewGeoMapState();
}

class _NewGeoMapState extends State<NewGeoMap> {
  @override
  Widget build(BuildContext context) {
    return FlutterMap(
      mapController: widget.mapController,
      options: MapOptions(
        interactionOptions: InteractionOptions(
          flags: InteractiveFlag.all
        ),
        onPositionChanged: (position, hasGesture) {
          if (hasGesture) {
            widget.mapController.move(position.center, position.zoom);
          }
        }
      ),
      children: [
        TileLayer(
          urlTemplate: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
        )
      ]);
  }
}

已尝试的解决方法

  • 在真机上运行,并且在onPositionChanged里加了debugPrint调试
  • 用onMapReady确认MapController是否已经正确绑定
  • 替换了TileLayer的urlTemplate,怀疑是OpenStreetMap的问题

其中第1、3个尝试没有得到有效的信息或改善;第2个尝试发现move()方法返回false,因为widget.mapController.center和position.center是同一个值,但在拖拽手势过程中地图还是会被重新定位。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 14:53:01