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

Flutter插件google_maps_webservice的fields参数报错求助

Flutter google_maps_webservice插件getDetailsByPlaceId调用报错排查

问题背景

使用google_maps_webservice^0.0.20-nullsafety.5插件调用getDetailsByPlaceId方法时,添加fields: ['name']参数后持续触发类型转换错误,注释该参数则可正常运行,但需要此参数减少API调用成本。

方法签名:

Future getDetailsByPlaceId(
  String placeId, {
  String? sessionToken,
  List fields = const [],
  String? language,
  String? region,
})

调用代码

PlacesDetailsResponse detail =
    await _places.getDetailsByPlaceId(
        p.placeId.toString(),
        fields: ['name'],     // 注释该行可正常运行,但需此参数节省成本
        language: 'fr',
        region:"fr",
    );

报错信息

E/flutter ( 9854): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'Null' is not a subtype of type 'String' in type cast
E/flutter ( 9854): #0      _$PlaceDetailsFromJson (package:google_maps_webservice/src/places.g.dart:138:31)
E/flutter ( 9854): #1      new PlaceDetails.fromJson (package:google_maps_webservice/src/places.dart:710:7)
E/flutter ( 9854): #2      _$PlacesDetailsResponseFromJson (package:google_maps_webservice/src/places.g.dart:294:26)
E/flutter ( 9854): #3      new PlacesDetailsResponse.fromJson (package:google_maps_webservice/src/places.dart:838:7)
E/flutter ( 9854): #4      GoogleMapsPlaces._decodeDetailsResponse (package:google_maps_webservice/src/places.dart:528:29)
E/flutter ( 9854): #5      GoogleMapsPlaces.getDetailsByPlaceId (package:google_maps_webservice/src/places.dart:126:12)
E/flutter ( 9854): 
E/flutter ( 9854): #6      _LocationPickerInitialState.goToPlace (package:myproj/screens/maps/initialOwnerLocationpicker.dart:149:11)

原因与解决办法

原因

报错指向插件自动生成的序列化文件places.g.dart,说明当仅指定fields: ['name']时,Google Places API返回的响应中缺少PlaceDetails模型类中某些被标记为非空的字段值,插件的序列化代码强制将这些空值转为String类型,触发类型转换异常。

解决办法

  1. 补充必填字段:在fields参数中添加插件序列化依赖的核心字段,至少包含place_id(模型类必须依赖此字段完成反序列化),修改为:
    fields: ['name', 'place_id']
    
    可根据插件源码中PlaceDetails的定义,确认其他必填字段并补充。
  2. 升级插件版本:该版本的空安全处理可能存在缺陷,尝试升级到最新稳定版,大概率已修复此类序列化兼容问题。
  3. 自定义序列化逻辑:若无法升级插件,可自行解析API返回的JSON数据,跳过插件自带的序列化流程,直接提取所需字段。

内容的提问来源于stack exchange,提问作者Le Pepe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:31