Flutter项目从API获取URL字段为Null的问题排查
Flutter API返回URL字段解析为Null的问题解决
问题场景
开发Flutter项目时,调用API获取事件列表,Postman等工具能正常返回url字段值,但Flutter中解析该字段始终为Null。若在eventModel.fromJson方法中去掉rakazUrl字段的.toString(),会触发空指针报错。
排查方向
- JSON字段键名不匹配:Flutter的
Map是大小写敏感的,需确认API返回的JSON中URL字段的键名是否为url(比如是否是Url/URL,或嵌套在子对象中)。 - 空值未处理:部分事件对象可能没有
url字段,直接调用.toString()会因null触发报错。 - API请求参数不一致:Flutter中的请求参数(如
rakazCode的类型、格式)可能与Postman调用时存在差异,导致返回数据结构不同。
解决方案
1. 确认API返回的原始JSON结构
在解析数据前打印原始列表,明确url字段的位置:
final data = listViewGetCandEventsByEntityIdResponse.jsonBody['eventList'] as List; print('原始事件数据:$data'); // 打印后查看每个对象的字段结构
如果发现url嵌套在子对象中(比如rakaz对象下),需修改解析路径,例如:
rakazUrl: json['rakaz']?['url']?.toString() ?? '',
2. 完善空值安全处理
修改eventModel.fromJson方法,使用安全调用运算符?.和空值合并运算符??处理null情况,避免报错同时保证字段为String类型:
static eventModel fromJson(Map<String, dynamic> json) { return eventModel( dateEvent: json['date_event'] ?? '', statusEvent: json['status_event'] ?? '', descEvent: json['eventDescription'] ?? '', rakazName: json['rakazName']?.toString() ?? '', rakazUrl: json['url']?.toString() ?? '', // 安全处理null rakazPhone: json['rakazPhone']?.toString() ?? '', ); }
3. 对齐API请求参数与Postman
检查GetCandEventsByEntityId.call中的请求配置:
- 确认
body中的参数格式与Postman一致,比如rakazCode如果API要求是字符串类型,需修改body中的写法:final body = ''' { "token": "", "entityId": ${entityId}, "rakazCode": "${rakazCode}", // 加上引号,确保是字符串类型 "pageNumber": 1, "rowsPerPage": 300, "search": "${search}", }'''; - 注意方法中同时传递了
params和body,部分API可能只接受一种传参方式,若不需要params可删除该参数。
4. 验证字段大小写匹配
确认API返回的字段名与Flutter中使用的键名完全一致(比如API返回URL而不是url),若不一致则修改解析时的键名。
内容的提问来源于stack exchange,提问作者Shon22
相关产品推荐
相关产品推荐

