flutter 踩坑小计: amap_base 地图缩放 zoom 设置无效的问题

Posted wyhlightstar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flutter 踩坑小计: amap_base 地图缩放 zoom 设置无效的问题相关的知识,希望对你有一定的参考价值。

这种问题估计也就我这种菜鸡能遇到了,因为我问了一些大佬,他们完全没遇到这类的问题。

如果你也遇到了,希望这篇文章能帮到你,倘若还不能解决你的问题,可以留言,我们共同研究。

问题:同样的插件,为什么偏偏我能遇到这种邪门问题,别人的就一帆风顺?

答案:菜是原罪!

 

场景描述:

在一个详情页面,需要展示地图,然后在真机上面调试的时候,地图显示的缩放比例完全跟zoom值不搭嘎,不管我的zoom值为5或是为15

经过几个小时的排查测试以及猜想,并且对一位大佬穷追猛问,之后发现是 addMarker 添加标记点引起的。

我也不知道为什么。

也想不明白为什么。

 

解决方案:

加延迟,在 addMarker 之后加延迟设置 zoom 值!


    AMapController _controller;
  Widget _mapShowWidget()
    return AMapView(
      onAMapViewCreated: (controller) async
        _controller = controller;
        _requestLocationPermissions();
      ,
      amapOptions: AMapOptions(
        compassEnabled: false,
        zoomControlsEnabled: false,
        logoPosition: LOGO_POSITION_BOTTOM_RIGHT,
        camera: CameraPosition(
          target: LatLng(latitude, longitude),
          zoom: 15,
        ),
      ),
    );
  

  Future<void> _requestLocationPermissions() async 
    // 添加标记点
    _controller.addMarker(
      MarkerOptions(
        icon: lib/assets/image/locamark.png,
        position: LatLng(latitude, longitude),
        displayLevel: 15
      ),
    );
    reGetCountdown();
  

  int count = 1;
  // 延迟加载
  Timer _countdownTimer;
  void reGetCountdown() 
    // Timer的第一秒倒计时是有一点延迟的,为了立刻显示效果可以添加下一行。
    // 添加200毫秒的延迟
    _countdownTimer = new Timer.periodic(new Duration(milliseconds: 200), (timer) 
      setState(() 
        count = count - 1;
      );
      if(count == 0)
        _controller.setZoomLevel(15); // 设置 zoom
        setState(() 
          _countdownTimer.cancel();
        );
      
    );
  

问题到此算是解决了。原理我也说不清道不明。

简单解释就是,既然 addMarker 的时候会导致 zoom 失效,那就在 addMarker 之后再重新设置 zoom (setZoomLevel 写在 addMarker 之后也不行)

 

以上是关于flutter 踩坑小计: amap_base 地图缩放 zoom 设置无效的问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter踩坑之旅

Android Flutter踩坑

Flutter——实操踩坑:升级Flutter dart

Flutter 踩坑路由

Flutter踩坑之旅

Flutter音视频裁剪flutter_ffmpeg踩坑笔记