Dart/Flutter更新对象地址坐标后List字段被置空问题求助
问题详情
我有一个Event对象,内部包含3个不同枚举类型的List字段,以及一个Address类型的address字段。原本的创建流程是:接收Event对象后,调用方法计算地址坐标并写入address的coordinates字段,之后调用后续方法将数据存入数据库。
此前流程正常运行,但近期更新coordinates字段时,所有List字段内存储的值都会丢失。
相关代码
EventDto.create方法
static Future<Event?> create(Event event, File? coverImage) async { event.address.coordinates = await GeocodingService.addressToCoordinatesSecure( event.address, ); debugPrint('Creating event...'); // 方法其余部分无关故未粘贴 }
GeocodingService.addressToCoordinatesSecure方法
static Future<LatLng> addressToCoordinatesSecure(Address address) async { // URL encode the address String addressString = address.line1 + ', ' + address.city + ' ' + address.postalCode + ', ' + address.country; var encodedAddress = Uri.encodeComponent(addressString); // Replace with your Supabase Edge Function URL var url = Uri.parse( 'https://ahhlfubdcyjqwsxieksc.supabase.co/functions/v1/get-coordinates'); try { var response = await http.post( url, headers: { // Add a Bearer token using SupabaseAuthentication.getJWT() function 'Authorization': 'Bearer ${await AuthenticationDto.getJWT()}', 'Content-Type': 'application/json', }, body: jsonEncode({'encodedAddress': encodedAddress}), ); if (response.statusCode == 200) { var data = json.decode(response.body) as List; if (data.isNotEmpty) { var lat = double.parse(data[0]['lat'].toString()); var lon = double.parse(data[0]['lon'].toString()); return LatLng(lat, lon); } else { throw Exception('No results found.'); } } else { // Failed to load data and in a new line ErrorCode: ${response.statusCode} throw Exception( 'Failed to load location data. \nErrorCode: ${response.statusCode}\n ${response.body}'); } } catch (e) { throw Exception('Failed to load location data: $e'); } }
调试情况
- 在
create方法开头设置断点时,List字段的值存在; - 计算完坐标后,这些值消失;
- 尝试过在传递地址给地理编码方法前复制
Address对象,也尝试先将坐标赋值给LatLng变量再写入event.address.coordinates,但List的值在赋值前就丢失,似乎是在地理编码方法执行过程中丢失的; - 地理编码方法并未访问或修改整个
Event对象及其中的List字段,完全不清楚原因。
内容的提问来源于stack exchange,提问作者Marin Sušić
相关产品推荐
相关产品推荐

