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

Flutter Ferry传递null至GraphQL筛选变量时报错求助

Flutter Ferry 传递null筛选变量失效问题解决方案

1. 强制序列化保留null字段

Ferry默认依赖json_serializable生成序列化代码,默认会忽略null值。你需要在对应的筛选模型类中,给eq字段添加@JsonKey(includeIfNull: true)注解:

class DeletedByProfileGuidFilter {
  final String? eq;

  DeletedByProfileGuidFilter({this.eq});

  @JsonKey(includeIfNull: true)
  Map<String, dynamic> toJson() => _$DeletedByProfileGuidFilterToJson(this);
}

如果是ferry_generator自动生成的代码,你可以修改.gql.dart生成模板,或者在GraphQL Schema的筛选类型上添加自定义指令,让生成器自动带上该注解。

2. 手动构造变量Map绕过自动序列化

如果修改生成代码不方便,直接用Map构造变量,强制保留null值:

final queryVars = {
  'deletedByProfileGuid': {
    'eq': null,
  },
};
// 将此Map直接传入Ferry的查询请求

这种方式可以跳过自动序列化的null值过滤,确保请求JSON中保留"eq": null的合法格式。

3. 检查Ferry客户端序列化配置

初始化GraphQLClient时,确认使用的序列化器未配置移除null字段的规则:

final client = GraphQLClient(
  link: HttpLink('你的API地址'),
  cache: Cache(),
  serializers: DefaultSerializers(),
);

避免自定义序列化逻辑中误删null字段。

额外排查点

  • 抓包对比客户端发送的请求与GraphQL Playground的请求,确认JSON结构差异,定位null值丢失的具体环节。
  • 验证HotChocolate服务的筛选器配置,确保其支持接收null作为筛选值(虽然Playground可正常执行,但需确认客户端请求格式与Playground完全一致)。

内容的提问来源于stack exchange,提问作者THE AMAZING

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:40:24