我在开发app签到功能时使用了百度地图sdk,我的需求是需要定位当期那位置并在当前位置限定范围距离内的位置才可以打卡,并且要在地图上进行展示。所以也就需要同时用到定位组件LocationFlutterPlugin和地理围栏组件GeofenceFlutterPlugin。在单独使用这两个组件的时候是没有任何问题的,但是当两个组件出现在同一页面时组件就失效了,定位后无法画出围栏,于是我将两个组件分开到了两个页面,现在A页面定位后将坐标传至B页面后显示地理围栏。这样逻辑上是没有问题,但是我这么操作后出现新的问题,当我从B页面调用接口打卡发回A页面后当我想再次选择新的地理位置调用定位组件时不会有返回结果。针对这个问题,应该是百度sdk内部的组件没销毁之类的所致吧,毕竟用的是百度sdk的官方组件,深究下去意义不大,我的处理方法是给定位组件单独设置了一个透明的loading页面,展示定位中的动画,当获取经纬度成功后关闭当前loading页面并跳转至地图页面画下地理围栏,相当于是三个页面间的交互,至于页面值的回传因为多了一个已经关闭的loading页面,所以通过flutter自带的api是无法直接传回来了,所以这里使用了event_bus组件将选好的地点信息返回到之前的页面。
以上就是个人的解决思路。
在将一个页面透明化弹窗化时需要使用如下方式跳转,opaque属性设置为false才能透明。
onTap: () async {
Navigator.of(context).push(PageRouteBuilder(
opaque: false,//重点是这个属性
pageBuilder: (context, animation, secondaryAnimation) {
return BdLocationWindowPage(
signRange: signTempEntity.signRange,
);
}));
},