這種問題估計也就我這種菜雞能遇到了,因為我問了一些大佬,他們完全沒遇到這類的問題。
如果你也遇到了,希望這篇文章能幫到你,倘若還不能解決你的問題,可以留言,我們共同研究。
問題:同樣的插件,為什么偏偏我能遇到這種邪門問題,別人的就一帆風順?
答案:菜是原罪!
場景描述:
在一個詳情頁面,需要展示地圖,然后在真機上面調試的時候,地圖顯示的縮放比例完全跟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 之后也不行)