Flutter GraphQL代码生成插件gql_code_builder的使用
Flutter GraphQL代码生成插件gql_code_builder的使用
概述
gql_code_builder
是一个用于 Dart 的代码生成工具,它能够将 *.graphql
文档和 SDL(Schema Definition Language)转换为有用的类。尽管其 API 目前还不稳定,但它是 package:gql_build
构建器的基础。
特性和问题报告
请在 issue tracker 提交功能请求和错误报告。
示例 Demo
以下是使用 gql_code_builder
生成 GraphQL 类的完整示例:
- 添加依赖项
首先,在 pubspec.yaml
文件中添加以下依赖项:
dependencies:
gql: ^0.13.0
gql_http_link: ^0.4.0
gql_code_builder: ^0.2.0
dev_dependencies:
build_runner: ^2.0.0
- 创建 GraphQL 查询文件
在项目中创建一个名为 queries.graphql
的文件,并定义您的 GraphQL 查询。例如:
# queries.graphql
query GetRepositories($n: Int!) {
viewer {
repositories(first: $n) {
nodes {
name
description
}
}
}
}
- 配置构建脚本
在 build.yaml
文件中配置 gql_code_builder
,以便它可以处理 *.graphql
文件并生成相应的 Dart 类。
targets:
$default:
builders:
gql_code_builder|gql_builder:
options:
schema_mapping:
- schema: 'lib/schema.graphql'
queries_glob: 'lib/queries/**.graphql'
output: 'lib/generated/graphql_api.dart'
确保 schema.graphql
包含您的 GraphQL schema 定义。
- 运行构建器
使用 build_runner
运行构建器以生成代码:
flutter pub run build_runner build
这将生成一个包含查询类的 Dart 文件,例如 lib/generated/graphql_api.dart
。
- 使用生成的类
现在可以在您的 Flutter 应用程序中使用生成的类来执行 GraphQL 查询。例如:
import 'package:gql/apollo.dart';
import 'package:gql_http_link/gql_http_link.dart';
import 'package:flutter/material.dart';
import 'generated/graphql_api.dart'; // Generated file
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: GraphQLExample(),
);
}
}
class GraphQLExample extends StatefulWidget {
[@override](/user/override)
_GraphQLExampleState createState() => _GraphQLExampleState();
}
class _GraphQLExampleState extends State<GraphQLExample> {
late Client client;
[@override](/user/override)
void initState() {
super.initState();
final link = HttpLink('https://api.github.com/graphql');
client = Client(
link: link,
cache: Cache(), // Optional
);
}
Future<void> fetchRepositories() async {
final options = QueryOptions(
document: GET_REPOSITORIES, // This is the generated query class
variables: <String, dynamic>{'n': 5},
);
final result = await client.query(options);
if (result.hasException) {
print(result.exception.toString());
} else {
print(result.data);
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GraphQL Example'),
),
body: Center(
child: ElevatedButton(
onPressed: fetchRepositories,
child: Text('Fetch Repositories'),
),
),
);
}
}
更多关于Flutter GraphQL代码生成插件gql_code_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GraphQL代码生成插件gql_code_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用gql_code_builder
插件来生成GraphQL代码的示例。这个插件能够根据你的GraphQL查询和变更操作生成相应的Dart代码,从而简化与GraphQL API的交互。
1. 安装依赖
首先,你需要在你的pubspec.yaml
文件中添加gql_code_builder
及其相关依赖:
dependencies:
flutter:
sdk: flutter
graphql: ^x.y.z # 确保你使用的是最新版本的graphql库
dev_dependencies:
build_runner: ^x.y.z # 使用build_runner来运行代码生成命令
gql_code_builder: ^x.y.z # gql_code_builder插件
gql: ^x.y.z # gql库通常也是需要的
将上述x.y.z
替换为实际版本号。
2. 定义GraphQL Schema
你需要在项目中定义一个GraphQL schema文件(例如schema.graphql
),这个文件描述了你的GraphQL API的结构。示例:
# schema.graphql
schema {
query: Query
}
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String!
email: String!
}
3. 定义GraphQL Operations
接下来,定义你的GraphQL操作(查询和变更),例如operations.graphql
:
# operations.graphql
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}
4. 配置build.yaml
在你的项目根目录下创建一个build.yaml
文件,用于配置gql_code_builder
:
targets:
$default:
builders:
gql_code_builder:
generate_for:
- "**/*.graphql"
options:
schema: "schema.graphql"
output: "lib/graphql_api/"
这个配置告诉gql_code_builder
,根据schema.graphql
和所有.graphql
文件生成代码,并将生成的代码输出到lib/graphql_api/
目录。
5. 运行代码生成
在终端中运行以下命令来生成代码:
flutter pub get
flutter pub run build_runner build
6. 使用生成的代码
生成代码后,你可以在lib/graphql_api/
目录下找到相应的Dart文件。例如,对于GetUser
查询,你可能会得到一个GetUser.data.dart
和GetUser.var.dart
文件。
你可以在你的Flutter组件中使用这些生成的代码。例如:
import 'package:your_app/graphql_api/get_user.data.g.dart';
import 'package:your_app/graphql_api/get_user.var.g.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
// 假设你有一个GraphQLClient实例
final GraphQLClient client = GraphQLClient(
cache: InMemoryCache(),
link: HttpLink(
uri: 'https://your-graphql-endpoint.com/graphql',
),
);
void _fetchUserData(String userId) async {
final OperationResult<GetUserData, GetUserVariables> result =
await client.query(
GetUser.operation(variables: GetUserVariables(id: userId)),
);
if (result.data?.user != null) {
print('User ID: ${result.data!.user!.id}');
print('User Name: ${result.data!.user!.name}');
print('User Email: ${result.data!.user!.email}');
} else if (result.hasErrors) {
result.errors!.forEach((error) => print(error.message));
}
}
这个示例展示了如何执行一个GraphQL查询并处理结果。
通过上述步骤,你应该能够在Flutter项目中成功使用gql_code_builder
插件来生成GraphQL代码,并简化与GraphQL API的交互。