FlutterFlow插件代码报错:placePosition字段不存在问题排查
FlutterFlow插件位置字段报错修复(placePosition已废弃)
你的代码中double lat2 = place.placePosition!.latitude;行报错,核心原因是FlutterFlow的PlacesRecord类里,placePosition字段已经被废弃,现在官方改用geoPoint字段存储位置信息。
核心修改步骤
直接将代码中调用placePosition的部分替换为geoPoint,同时做好空安全处理:
- 替换原有的位置字段调用:
原代码:
修改为:double lat2 = place.placePosition!.latitude; double lon2 = place.placePosition!.longitude;if (place.geoPoint == null) continue; // 跳过无位置数据的条目 double lat2 = place.geoPoint!.latitude; double lon2 = place.geoPoint!.longitude;
修改后的完整代码
List<PlacesRecord> getPlacesMaximumDistance( List<PlacesRecord> places, LatLng userGeo, double maxDistance, ) { /// MODIFY CODE ONLY BELOW THIS LINE List<PlacesRecord> placesList = []; List<double> listKm = []; double lat1 = userGeo.latitude; double lon1 = userGeo.longitude; for (PlacesRecord place in places) { // 跳过无位置数据的条目,避免空指针 if (place.geoPoint == null) continue; double lat2 = place.geoPoint!.latitude; double lon2 = place.geoPoint!.longitude; // 球面距离计算逻辑 var c = math.cos; var p = 0.017453292519943295; var a = 0.5 - c((lat2 - lat1) * p) / 2 + c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2; var d = (12742 * math.asin(math.sqrt(a))); String inString = d.toStringAsFixed(2); double inDouble = double.parse(inString); listKm.add(inDouble); listKm.sort(); int listKmIndex = listKm.indexWhere((dist) => dist == inDouble); if (inDouble <= maxDistance) { placesList.insert(listKmIndex, place); } } return placesList; /// MODIFY CODE ONLY ABOVE THIS LINE }
额外注意事项
- 字段确认:如果替换
geoPoint后仍报错,打开FlutterFlow的Data面板,查看PlacesRecord的结构,确认当前项目中存储位置的字段名(部分项目可能自定义为location等)。 - 空安全优化:如果允许无位置的条目保留,可以将
continue改为给lat2/lon2设置默认值,比如double lat2 = place.geoPoint?.latitude ?? 0.0;。 - 性能优化:当前代码每次循环都对
listKm排序,效率较低,可以在所有距离计算完成后统一排序,再映射到placesList,不过这属于非必要优化。
内容的提问来源于stack exchange,提问作者Yardo
相关产品推荐
相关产品推荐

