Flutter GraphQL如何替换queryVariables中的固定参数值
Flutter GraphQL动态替换查询变量解决方案
最优实现方案(推荐)
你完全不需要硬编码JSON格式的queryVariables字符串再做替换操作,GraphQL客户端原生支持Map类型的变量参数,直接构造动态Map即可,代码示例如下:
// 1. 你原本的query常量可以保留不需要修改 const String query = r''' query Albums($where: AlbumWhereInput) { albums(where: $where) { id title artist { name } } } '''; // 2. 请求时直接传入动态的artistId构造变量Map Future<QueryResult> getAlbumsByArtistId(int artistId) async { // 动态构造variables,不需要处理JSON字符串 final variables = { "where": { "artist_id": artistId } }; return performQuery(query, variables: variables); } // 3. 你原本的performQuery方法不需要任何修改 Future<QueryResult> performQuery(String query, {required Map<String, dynamic> variables}) async { QueryOptions options = QueryOptions(document: gql(query), variables: variables); final result = await _client.query(options); return result; }
这种方案不需要处理字符串转义、天然类型安全,不会出现JSON格式错误,是官方推荐的标准用法。
替代方案(不推荐,仅作参考)
如果你确实需要操作JSON字符串做替换,可以用字符串模板生成动态JSON后再解码为Map:
import 'dart:convert'; String generateVariablesStr(int artistId) { return ''' { "where": { "artist_id": $artistId } } '''; } // 使用时 int targetArtistId = 1001; // 动态传入的参数 Map<String, dynamic> variables = jsonDecode(generateVariablesStr(targetArtistId));
该方案容易出现转义错误、类型不匹配问题,非必要不使用。
内容的提问来源于stack exchange,提问作者Alex Aung
相关产品推荐
相关产品推荐

