Flutter GraphQL查询构建插件simple_graphql_query_builder的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter GraphQL查询构建插件simple_graphql_query_builder的使用

simple_graphql_query_builder 是一个用于构建GraphQL API查询的简单工具。它可以帮助开发者快速生成符合GraphQL规范的查询语句,并且可以与 simple_graphql_query_builder_gen 一起使用,以帮助生成查询结果。

功能

  • 简单的GraphQL查询构建器
  • 可以与 simple_graphql_query_builder_gen 一起使用,以帮助生成查询结果

使用方法

示例用法

以下是一个简单的示例,展示了如何使用 simple_graphql_query_builder 构建一个GraphQL查询:

final query = QueryBuilder(
    queryName: 'HeroAndFriends', // 查询名称
    name: 'hero', // 查询字段名
    type: QueryBuilderType.query, // 查询类型(query或mutation)
    variables: [
        QueryVariable(
            name: 'episode', // 变量名
            type: 'Episode!', // 变量类型,带感叹号表示必填
            defaultValue: 'JEDI' // 默认值
        ),
    ],
    fields: {
        'name': null, // 字段名
        'friends': { // 嵌套字段
            'name': null,
        }
    },
).build();

上述代码将生成以下GraphQL查询:

query HeroNameAndFriends($episode: Episode = JEDI) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}

使用 toJson()toMap()

你可以使用 toJson()toMap() 方法来构建 fields,例如:

class Hero {
  final String? name;

  const Hero({this.name});

  Map<String, dynamic> toJson() {
    return {
      'name': this.name,
    };
  }
}

final query = QueryBuilder(
    queryName: 'HeroAndFriends',
    name: 'hero',
    type: QueryBuilderType.query,
    variables: [
        QueryVariable(name: 'episode', type: 'Episode!', defaultValue: 'JEDI'),
    ],
    fields: Hero(name: 'xyz').toJson(), // 使用 toJson() 方法
).build();

graphql 包一起使用

你可以将生成的查询与 graphql 包一起使用,执行实际的API调用:

final QueryResult result = await client.query(query);

参数说明

QueryVariable

名称 示例查询中的表示 要求 备注
name $episode 必须匹配GraphQL schema
type Episode 必须匹配GraphQL schema 如果是必填项,使用 Episode!
schemaName episode 必须匹配GraphQL schema 默认值从 name 参数派生
defaultValue JEDI 如果为空,则不生效

QueryBuilderType

名称 描述
query 用于 query 类型的调用
mutation 用于 mutation 类型的调用

QueryBuilder

名称 示例查询中的表示 要求 备注
queryName HeroNameAndFriends 可以是任意名称 默认值从 name 参数派生
name hero 必须匹配GraphQL schema
type query 必须是 QueryBuilderType 类型 参考 QueryBuilderType
variables ($episode: Episode = JEDI)(episode: $episode) 必须是 QueryVariable 类型 参考 QueryVariable
fields name friends { name } 字段映射 可以与 toJson() 一起使用

完整示例 Demo

以下是一个完整的示例,展示了如何在Flutter项目中使用 simple_graphql_query_builder 构建和执行GraphQL查询:

import 'package:simple_graphql_query_builder/simple_graphql_query_builder.dart';
import 'package:graphql_flutter/graphql_flutter.dart';

void main() async {
  // 初始化GraphQL客户端
  final HttpLink httpLink = HttpLink('https://your-graphql-endpoint.com/graphql');
  final ValueNotifier<GraphQLClient> client = ValueNotifier(
    GraphQLClient(
      link: httpLink,
      cache: GraphQLCache(),
    ),
  );

  // 构建查询
  final query = QueryBuilder(
      queryName: 'HeroAndFriends',
      name: 'hero',
      type: QueryBuilderType.query,
      variables: [
        QueryVariable(
            name: 'episode', 
            type: 'Episode!', 
            defaultValue: 'JEDI'
        ),
      ],
      fields: {
        'name': null,
        'friends': {
          'name': null,
        }
      },
  ).build();

  // 执行查询
  final QueryResult result = await client.value.query(QueryOptions(
    document: gql(query),
    variables: {'episode': 'JEDI'},
  ));

  // 检查结果
  if (result.hasException) {
    print('Error: ${result.exception.toString()}');
  } else {
    print('Data: ${result.data}');
  }
}

示例输出

假设GraphQL服务器返回以下数据:

{
  "data": {
    "hero": {
      "name": "Luke Skywalker",
      "friends": [
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}

则控制台将输出:

Data: {hero: {name: Luke Skywalker, friends: [{name: Han Solo}, {name: Leia Organa}]}}

更多关于Flutter GraphQL查询构建插件simple_graphql_query_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GraphQL查询构建插件simple_graphql_query_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用simple_graphql_query_builder插件来构建GraphQL查询的示例代码。这个插件可以帮助你动态地构建复杂的GraphQL查询。

首先,确保你已经在pubspec.yaml文件中添加了simple_graphql_query_builder依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_graphql_query_builder: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

以下是一个完整的示例,展示如何使用simple_graphql_query_builder来构建一个GraphQL查询并执行它:

import 'package:flutter/material.dart';
import 'package:simple_graphql_query_builder/simple_graphql_query_builder.dart';
import 'package:graphql_flutter/graphql_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter GraphQL Query Builder Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GraphQLClient _client = GraphQLClient(
    endpoint: 'https://your-graphql-endpoint.com/graphql',  // 替换为你的GraphQL端点
  );

  String _queryResult = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter GraphQL Query Builder Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              decoration: InputDecoration(
                labelText: 'GraphQL Query (Generated)',
                readOnly: true,
              ),
              controller: TextEditingController(text: _generateGraphQLQuery()),
              maxLines: 10,
              expandable: true,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                final result = await _client.query(_generateGraphQLQuery());
                setState(() {
                  _queryResult = result.data?.toString() ?? 'Error fetching data';
                });
              },
              child: Text('Execute Query'),
            ),
            SizedBox(height: 16),
            Text('Result:'),
            Text(_queryResult),
          ],
        ),
      ),
    );
  }

  String _generateGraphQLQuery() {
    final queryBuilder = GraphQLQueryBuilder()
      ..field('user')
      ..argument('id', '1')
      ..subField('name')
      ..subField('email');

    // 添加更多字段或子字段
    // queryBuilder
    //   ..field('posts')
    //   ..subField('title')
    //   ..subField('content');

    return queryBuilder.build();
  }
}

解释

  1. 依赖添加:确保在pubspec.yaml中添加了simple_graphql_query_buildergraphql_flutter依赖。

  2. GraphQLClient:使用GraphQLClient初始化GraphQL客户端,并设置GraphQL端点。

  3. 查询构建:使用GraphQLQueryBuilder动态构建GraphQL查询。在这个例子中,我们查询一个用户的nameemail字段。

  4. UI:使用TextField显示生成的GraphQL查询,并使用ElevatedButton执行查询。查询结果会显示在下方的Text组件中。

注意事项

  • 确保替换https://your-graphql-endpoint.com/graphql为你的实际GraphQL服务器地址。
  • 你可以根据需要扩展GraphQLQueryBuilder以构建更复杂的查询。
  • 错误处理在实际应用中非常重要,这里为了简化示例而省略了。

希望这个示例能帮你更好地理解如何在Flutter项目中使用simple_graphql_query_builder插件。

回到顶部