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

Flutter调用Laravel GraphQL接口传参报错及无返回值问题求助

问题排查与解决步骤

语法错误修复说明

你最开始遇到的SourceSpanException是因为GraphQL语法要求:变量必须先在查询的根签名中声明,才能在字段参数中使用,你修改后的查询语法已经符合规范,无需再调整语法结构。


无返回结果的排查方案

按优先级依次排查以下点:

1. 修复参数类型不匹配问题

你Laravel Schema中定义的user查询id参数为ID类型,但你Flutter查询中声明的变量是Int!类型,类型不匹配会导致后端参数校验失败、匹配不到数据,修改如下:

document: gql(r'''
  query GetUser($id: ID!) { 
    user(id: $id) {
        id
        name
        email
    }
  }
'''),
variables:{
  'id': "9", // ID类型兼容字符串和数字,统一传字符串避免Laravel侧类型校验不通过
},

2. 打印完整请求响应排查错误

给你的graphql_flutter客户端加日志中间件,输出完整的请求参数、响应内容,确认是否有隐藏的报错:

// 初始化GraphQLClient时添加LoggingLink
final client = GraphQLClient(
  link: HttpLink(
    '你的GraphQL接口地址',
    defaultHeaders: {'Accept': 'application/json'},
  ).concat(LoggingLink()), // 开启日志后控制台会打印所有请求和返回数据
  cache: GraphQLCache(),
);

重点看返回结果中的errors字段,权限不足、参数格式错误、路由错误等问题都会在这里有明确提示。

3. 校验请求上下文差异

对比graphql-playground的请求和Flutter请求的差异:

  • 确认是否缺少权限头:如果接口需要登录鉴权,检查Flutter请求是否携带了和playground一致的Authorization头
  • 确认接口地址是否正确:避免测试环境和生产环境地址混用
  • 确认@eq指令行为:Laravel Lighthouse的@eq指令默认是严格匹配,若变量类型和数据库字段类型不一致会匹配不到数据。

4. 简化测试验证

可以先写死参数在Flutter的查询语句里,确认能正常返回后再改回变量传参,排除变量传递逻辑的问题:

// 测试用硬编码查询,确认接口连通性
document: gql(r'''
  query {
    user(id: 9) {
        id
        name
        email
    }
  }
'''),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:05