Flutter百度地图定位插件与地理围栏插件冲突问题

我在开发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,
                        );  
                      }));
                },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用百度地图Flutter插件来将所有的标记(marker)显示在屏幕内。首先,你需要在Flutter项目中引入百度地图插件,可以在`pubspec.yaml`文件中添加如下依赖: ``` dependencies: flutter_baidu_map: ^x.x.x ``` 然后运行`flutter packages get`命令来获取插件。接下来,你可以在需要显示地图的页面中使用`BaiduMap`组件。在此组件中,你可以设置地图的中心点和缩放级别。 为了将所有的标记显示在屏幕内,你需要先获取所有标记的经纬度坐标。然后,使用`BaiduMapController`提供的`setViewport`方法来调整地图的视野范围,使得所有标记都能显示在屏幕内。示例代码如下: ```dart import 'package:flutter_baidu_map/flutter_baidu_map.dart'; class MapScreen extends StatefulWidget { @override _MapScreenState createState() => _MapScreenState(); } class _MapScreenState extends State<MapScreen> { BaiduMapController _mapController; List<LatLng> _markerCoordinates = [ LatLng(39.909187, 116.397451), // 假设有多个标记 LatLng(39.908724, 116.397456), LatLng(39.907372, 116.397951), // ... ]; @override Widget build(BuildContext context) { return Scaffold( body: BaiduMap( onCreated: (controller) { _mapController = controller; _adjustViewport(); // 在地图创建后调整视野范围 }, ), ); } void _adjustViewport() { if (_mapController != null && _markerCoordinates.isNotEmpty) { double minLat = _markerCoordinates[0].latitude; double maxLat = _markerCoordinates[0].latitude; double minLng = _markerCoordinates[0].longitude; double maxLng = _markerCoordinates[0].longitude; // 计算标记的最小和最大经纬度 for (LatLng coordinate in _markerCoordinates) { minLat = min(minLat, coordinate.latitude); maxLat = max(maxLat, coordinate.latitude); minLng = min(minLng, coordinate.longitude); maxLng = max(maxLng, coordinate.longitude); } // 调整地图视野范围 LatLngBounds bounds = LatLngBounds( southwest: LatLng(minLat, minLng), northeast: LatLng(maxLat, maxLng), ); _mapController.setViewport(bounds); } } } ``` 这样,地图将会自动调整视野,使得所有的标记都能显示在屏幕内。你可以根据需要修改标记的经纬度坐标和其他地图的参数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值