无法向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
相关产品推荐
相关产品推荐

