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

无法向GraphQL传递变量?遇“Undefined name 'id'”错误求助

问题原因

你遇到的错误是因为Dart字符串的插值机制:在Dart的普通字符串(包括多行字符串)中,$开头的内容会被解析为Dart变量,但你代码里的$id并不是当前Dart作用域内定义的变量,而是GraphQL查询的变量,所以Dart编译器会报错“Undefined name 'id'”。

解决方法

需要让Dart把GraphQL变量里的$当成普通字符处理,有两种常用方式:

  • 在$前加反斜杠\进行转义
  • 使用Dart的原始字符串(在字符串前加r),原始字符串不会解析$插值

修正后的代码示例

方式1:转义$符号

final result = await _client.query(QueryOptions(document: gql('''
 query getTenancyListQuery(\$id:Int!) {    
    tenancy(tenant_id_eq: \$id){   
    id
  }
}
'''), variables: {'id': 6}));

方式2:使用原始字符串

final result = await _client.query(QueryOptions(document: gql(r'''
 query getTenancyListQuery($id:Int!) {    
    tenancy(tenant_id_eq: $id){   
    id
  }
}
'''), variables: {'id': 6}));

修改后,Dart就不会把$id当成自身变量,而是完整传递给GraphQL解析器,和你传入的variables: {'id': 6}对应匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:52:17