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 之后也不行)
The most terrible person in the world is yourself