Flutter GraphQL代码生成配置插件graphql_codegen_config的使用

Flutter GraphQL代码生成配置插件graphql_codegen_config的使用

在开发Flutter应用时,处理GraphQL查询可能会变得繁琐且容易出错。为了简化这一过程,可以使用graphql_code_generator插件来自动为你的GraphQL查询生成类型安全的代码。为了更好地配置这些代码生成器,我们可以使用graphql_codegen_config插件。

安装

首先,确保在你的pubspec.yaml文件中添加了graphql_code_generator依赖项:

dependencies:
  graphql_flutter: ^5.0.0

dev_dependencies:
  build_runner: ^2.0.0
  graphql_code_generator: ^3.0.0

然后,你需要安装graphql_codegen_config插件。在dev_dependencies部分添加以下内容:

dev_dependencies:
  graphql_codegen_config: ^1.0.0

配置

在项目根目录下创建一个名为build.yaml的文件,并添加以下内容:

targets:
  $default:
    builders:
      graphql_codegen_config|graphql_codegen:
        options:
          schema: "lib/graphql/schema.graphql"
          documents: "lib/graphql/**/*.graphql"
          output_dir: "lib/generated/"

上述配置指定了GraphQL模式文件的位置(schema.graphql),要处理的GraphQL文档文件的位置(lib/graphql/**/*.graphql),以及生成代码的输出目录(lib/generated/)。

示例代码

假设你有一个简单的GraphQL查询文件lib/graphql/query/user.gql,内容如下:

query GetUser($id: ID!) {
  user(id: $id) {
    id
    name
    email
  }
}

在你的Dart文件中,你可以这样使用它:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('GraphQL Example')),
        body: UserQuery(),
      ),
    );
  }
}

class UserQuery extends StatefulWidget {
  [@override](/user/override)
  _UserQueryState createState() => _UserQueryState();
}

class _UserQueryState extends State<UserQuery> {
  final String query = r'''
    query GetUser($id: ID!) {
      user(id: $id) {
        id
        name
        email
      }
    }
  ''';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Query(
      options: QueryOptions(
        document: gql(query),
        variables: {'id': '1'},
      ),
      builder: (QueryResult result, {refetch, fetchMore}) {
        if (result.hasException) {
          return Text(result.exception.toString());
        }

        if (result.isLoading) {
          return Center(child: CircularProgressIndicator());
        }

        return Column(
          children: [
            Text('ID: ${result.data['user']['id']}'),
            Text('Name: ${result.data['user']['name']}'),
            Text('Email: ${result.data['user']['email']}'),
          ],
        );
      },
    );
  }
}

更多关于Flutter GraphQL代码生成配置插件graphql_codegen_config的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GraphQL代码生成配置插件graphql_codegen_config的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在使用 Flutter 进行开发时,如果你想使用 GraphQL 并自动生成 Dart 代码,graphql_codegen 是一个非常方便的工具。graphql_codegen_configgraphql_codegen 的配置插件,它允许你通过配置文件来定制代码生成的行为。

以下是如何配置和使用 graphql_codegen_config 的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 graphql_codegengraphql_codegen_config 的依赖:

dependencies:
  graphql_flutter: ^5.0.0
  graphql_codegen: ^5.0.0

dev_dependencies:
  graphql_codegen_config: ^5.0.0
  build_runner: ^2.0.0

2. 创建配置文件

在项目的根目录下创建一个 graphql_codegen.yaml 文件,这个文件用于配置代码生成的行为。以下是一个简单的配置示例:

schema: "lib/schema.graphql"
documents: "lib/**/*.graphql"
output: "lib/graphql/generated/"
generate_helpers: true
  • schema: 指定 GraphQL schema 文件的位置。
  • documents: 指定包含 GraphQL 查询、变更、订阅等的文件位置,支持 glob 模式。
  • output: 指定生成的 Dart 代码的输出目录。
  • generate_helpers: 是否生成辅助代码,如 QueryMutation 等类的帮助方法。

3. 运行代码生成器

配置完成后,你可以使用 build_runner 来生成代码。在终端中运行以下命令:

flutter pub run build_runner build

这将会根据 graphql_codegen.yaml 文件中的配置生成相应的 Dart 代码。

4. 使用生成的代码

生成的代码将会放在你指定的输出目录中,你可以直接在 Flutter 项目中使用这些代码。例如:

import 'package:graphql_flutter/graphql_flutter.dart';
import 'graphql/generated/graphql_api.graphql.dart';

void fetchData() async {
  final client = GraphQLClient(
    cache: GraphQLCache(),
    link: HttpLink('https://your-graphql-endpoint.com/graphql'),
  );

  final options = QueryOptions(
    document: GET_USER_QUERY_DOCUMENT,
    variables: {'id': '123'},
  );

  final result = await client.query(options);

  if (result.hasException) {
    print(result.exception);
  } else {
    print(result.data);
  }
}

5. 自动生成与开发

在开发过程中,你可以使用 build_runnerwatch 模式来自动生成代码:

flutter pub run build_runner watch

这样,每当你的 GraphQL 文件发生变化时,代码生成器会自动重新生成相应的 Dart 代码。

6. 自定义配置

graphql_codegen_config 还支持更多的配置选项,例如自定义生成的类型名称、是否生成片段等。你可以在 graphql_codegen.yaml 文件中添加更多的配置项来满足你的需求。

schema: "lib/schema.graphql"
documents: "lib/**/*.graphql"
output: "lib/graphql/generated/"
generate_helpers: true
naming_convention:
  type_names: pascal
  field_names: camel

7. 清理生成的文件

如果你需要清理生成的文件,可以使用以下命令:

flutter pub run build_runner clean
回到顶部