You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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ć

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:57:16