You need to enable JavaScript to run this app. Flutter使用graphql包如何移除__typename及多余字段,对齐Postman
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用graphql包如何移除__typename及多余字段,对齐Postman

Flutter graphql 插件返回多余__typename字段的解决方法

问题根源

graphql Flutter插件默认会从两个层面自动为请求注入__typename字段:

  • 内置缓存模块为了做对象识别,会自动在每个查询选择集中追加__typename
  • 代码生成流程默认会在生成GraphQL文档时补上__typename
    这类注入完全在客户端侧完成,哪怕你自己编写的查询里没有该字段,最终发往服务端的请求也会带上它,服务端自然会返回对应内容。而Postman不存在这类自动注入逻辑,因此返回的是和手写查询完全匹配的纯净结果。

配置调整步骤

  • 关闭缓存模块的自动注入
    初始化Cache实例时,将addTypename参数设为false,从根源阻断缓存层的自动字段注入,示例代码:
    final cache = Cache(
      addTypename: false,
    );
    
  • 配置请求策略保证返回纯净
    初始化GraphQLClient时,指定默认请求策略,避免缓存读取过程补全非业务字段,示例代码:
    final client = GraphQLClient(
      link: httpLink, // 替换为你实际的链路配置(HttpLink/鉴权Link等)
      cache: cache,
      defaultPolicies: const Policies(
        query: PolicyCache(
          fetch: FetchPolicy.networkOnly,
        ),
      ),
    );
    
  • 关闭代码生成阶段的自动注入
    如果项目使用graphql_codegen配合build_runner生成GraphQL类型、文档,需要修改build.yaml配置,关闭生成流程的自动追加逻辑:
    targets:
      $default:
        builders:
          graphql_codegen|graphql_builder:
            options:
              add_typename: false
    

效果验证

在接口链路中添加日志模块,将最终发往服务端的完整GraphQL查询、请求变量打印出来,和Postman中手写的请求内容做对比,只要两者完全一致,得到的响应就会和Postman返回完全相同,不存在__typename或其他非业务多余字段。

内容的提问来源于stack exchange,提问作者Faiz Ahammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 10:45:07