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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:54:06