Flutter iOS模拟器获取经纬度异常:调用latitude报空指针错误
iOS模拟器中Geolocator获取Position后访问latitude/longitude报空指针问题解决
针对你遇到的iOS模拟器上访问posisiNow.latitude/posisiNow.longitude报空指针,但打印posisiNow能得到正常结果的问题,提供以下解决方法:
1. 增加异常捕获与空安全校验
iOS模拟器获取位置时可能存在隐性异常导致posisiNow为null,建议添加异常捕获,并在访问属性前强制做空检查:
Position? posisiNow; try { posisiNow = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high, ); } catch (e) { print('获取位置失败: $e'); } if (posisiNow != null) { controllerNow.animateCamera(CameraUpdate.newCameraPosition( CameraPosition( bearing: 192.8334901395799, target: LatLng(posisiNow.latitude, posisiNow.longitude), tilt: 0, zoom: 16.00, ), )); } else { print('未获取到有效位置'); }
2. 临时 workaround:从打印字符串解析经纬度
既然直接打印posisiNow能得到正确的经纬度字符串,可以手动解析提取值:
Position posisiNow = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high, ); // 从字符串中匹配经纬度 final posStr = posisiNow.toString(); final latMatch = RegExp(r'Latitude: (\d+\.\d+)').firstMatch(posStr); final lngMatch = RegExp(r'Longitude: (-?\d+\.\d+)').firstMatch(posStr); if (latMatch != null && lngMatch != null) { final latitude = double.parse(latMatch.group(1)!); final longitude = double.parse(lngMatch.group(1)!); controllerNow.animateCamera(CameraUpdate.newCameraPosition( CameraPosition( bearing: 192.8334901395799, target: LatLng(latitude, longitude), tilt: 0, zoom: 16.00, ), )); }
3. 调整Geolocator版本
该问题属于版本兼容性bug,你可以尝试降级到geolocator: ^8.2.0或升级到更高稳定版本,避开当前版本的iOS模拟器适配问题。
内容的提问来源于stack exchange,提问作者wahyu
相关产品推荐
相关产品推荐

