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

Flutter中如何向GraphQL包的QueryOptions的变量参数传递布尔表达式

在Flutter中给GraphQL QueryOptions传递布尔过滤条件的正确方式

我来帮你解决这个问题!你当前的代码存在语法和逻辑上的小问题,我们一步步修正它,实现你想要的动态布尔过滤效果。

首先分析你代码里的问题

你想要根据isAvailable的值动态生成GraphQL查询的过滤变量,但现有写法有两个明显问题:

  1. {false}不是有效的Dart Map结构——Map必须是键值对形式,不能直接放单个布尔值
  2. is_available作为Map的键,在Dart里必须用字符串包裹(否则会被当作未定义的变量,引发编译错误)

正确的实现方案

假设你的后端GraphQL schema定义的过滤条件是类似is_available: { _eq: 布尔值 }的结构(这是Hasura等GraphQL服务常用的过滤格式),我们可以根据你的业务需求提供两种实现方式:

方案1:根据isAvailable动态匹配对应布尔值

如果你需要当isAvailable为true时查询is_available=true的条目,为false时查询is_available=false的条目,可以直接把变量值和Dart的布尔值绑定:

Future<QueryResult> FilteredQuery(
  final GraphQLClient client,
  final FilterModel filter,
  final bool isAvailable,
) async {
  final QueryOptions options = QueryOptions(
    document: gql(queryCreationsFiltered),
    variables: <String, dynamic>{
      'condition1': {
        'is_available': {'_eq': isAvailable}
      }
    },
  );

  final QueryResult result = await client.query(options);
  return result;
}

方案2:仅在特定条件下添加过滤规则

如果你需要当isAvailable为true时才过滤is_available=true的条目,为false时返回所有数据,可以用Dart的条件Map语法实现:

Future<QueryResult> FilteredQuery(
  final GraphQLClient client,
  final FilterModel filter,
  final bool isAvailable,
) async {
  final Map<String, dynamic> variables = {};
  
  // 仅当isAvailable为true时,添加过滤条件
  if (isAvailable) {
    variables['condition1'] = {
      'is_available': {'_eq': true}
    };
  }

  final QueryOptions options = QueryOptions(
    document: gql(queryCreationsFiltered),
    variables: variables,
  );

  final QueryResult result = await client.query(options);
  return result;
}

额外注意事项

  • 请确保你的GraphQL查询文档(queryCreationsFiltered)中,condition1变量的类型和你传递的嵌套Map结构完全匹配,比如对应的GraphQL输入类型应该定义了is_available字段及其子字段_eq
  • 如果你的后端支持null表示忽略该过滤条件,也可以用三元运算符简化:'condition1': isAvailable ? {'is_available': {'_eq': true}} : null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:12:29