Flutter GraphQL查询插件gql_gapher的使用

Flutter GraphQL查询插件gql_gapher的使用

Dart CI

如果你厌倦了在Dart和Flutter中将查询和突变作为原始字符串 r""" """ 编写?👋

验证并为所有定义在GraphQL文件(.graphql.gql)中的查询和突变生成类型化的请求类。它还支持片段。

使用

gql_gapher 添加到你的开发依赖项中:

dev_dependencies:
  gql_gapher: any   // 需要dart >=2.12.0
  build_runner:

编写你的查询和突变

创建一个GraphQL文件,例如 authenticate.graphql

mutation AuthenticateUser(
  $first: String!
  $second: Int!
  $third: Boolean
  $fourth: Float
) {
  authenticate(
    input: {
      firebase: { token: $first }
      data: { attempt: $second }
      amount: $third
    }
    rememberMe: $fourth
  ) {
    user {
      id
      email
      phone
    }
  }
}

然后运行生成器:

# dart
dart pub run build_runner build

# flutter
flutter pub run build_runner build

使用它

导入生成的文件:

import 'authenticate.g.dart';

void main() {
  // 创建一个请求对象
  final authPreq = AuthenticateUserRequest('First', 2, third: true, fourth: 2.3);

  // 打印查询字符串
  print(authPreq.query); // query

  // 打印变量
  print(authPreq.variables); // variables

  // 打印操作名
  print(authPreq.operation); // AuthenticateUser
}

更多

片段支持

支持片段导入,如下面的示例所示:

#import "../fragments/user_fragment.graphql"
#import "../fragments/location_fragment.graphql"

query GetUser($token: String!) {
  authenticate(input: { firebase: { token: $token } }, rememberMe: true) {
    location {
      name
      latitude
      longitude
      ...LocationFragment
    }
    ...UserFragment
  }
}

贡献者 ✨

欢迎任何形式的贡献!


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

1 回复

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


gql_gapher 是一个用于 Flutter 的 GraphQL 客户端插件,它允许你在 Flutter 应用中轻松地进行 GraphQL 查询、变异和订阅操作。以下是如何在 Flutter 项目中使用 gql_gapher 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 gql_gapher 依赖。

dependencies:
  flutter:
    sdk: flutter
  gql_gapher: ^0.1.0  # 请检查最新版本

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

2. 初始化 GraphQL 客户端

在你的 Flutter 应用中,你需要初始化一个 GraphQL 客户端。通常,你可以在 main.dart 文件中进行初始化。

import 'package:gql_gapher/gql_gapher.dart';

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

  runApp(MyApp(client: client));
}

3. 使用 GraphQL 客户端进行查询

在你的应用程序中,你可以使用 GraphQLClient 来执行 GraphQL 查询。以下是一个简单的查询示例:

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

class MyApp extends StatelessWidget {
  final GraphQLClient client;

  MyApp({required this.client});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GraphQL Example'),
        ),
        body: QueryExample(client: client),
      ),
    );
  }
}

class QueryExample extends StatefulWidget {
  final GraphQLClient client;

  QueryExample({required this.client});

  @override
  _QueryExampleState createState() => _QueryExampleState();
}

class _QueryExampleState extends State<QueryExample> {
  String? result;

  @override
  void initState() {
    super.initState();
    fetchData();
  }

  Future<void> fetchData() async {
    const String query = '''
      query {
        getUser(id: 1) {
          id
          name
          email
        }
      }
    ''';

    final QueryOptions options = QueryOptions(document: gql(query));

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

    if (result.hasException) {
      print(result.exception);
    } else {
      setState(() {
        this.result = result.data.toString();
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(result ?? 'Loading...'),
    );
  }
}

4. 使用 GraphQL 客户端进行变异

你可以使用 GraphQLClient 来执行 GraphQL 变异操作。以下是一个简单的变异示例:

Future<void> mutateData() async {
  const String mutation = '''
    mutation {
      createUser(name: "John Doe", email: "john@example.com") {
        id
        name
        email
      }
    }
  ''';

  final MutationOptions options = MutationOptions(document: gql(mutation));

  final QueryResult result = await widget.client.mutate(options);

  if (result.hasException) {
    print(result.exception);
  } else {
    setState(() {
      this.result = result.data.toString();
    });
  }
}

5. 使用 GraphQL 客户端进行订阅

gql_gapher 还支持 GraphQL 订阅。以下是一个简单的订阅示例:

Future<void> subscribeData() async {
  const String subscription = '''
    subscription {
      userCreated {
        id
        name
        email
      }
    }
  ''';

  final SubscriptionOptions options = SubscriptionOptions(document: gql(subscription));

  final Stream<QueryResult> subscriptionStream = widget.client.subscribe(options);

  subscriptionStream.listen((QueryResult result) {
    if (result.hasException) {
      print(result.exception);
    } else {
      setState(() {
        this.result = result.data.toString();
      });
    }
  });
}

6. 错误处理

在执行 GraphQL 操作时,建议始终检查 QueryResult 中是否有异常,并相应地处理错误。

if (result.hasException) {
  print(result.exception);
}
回到顶部