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 之后也不行)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM