Flutter GraphQL客户端插件flutter_graphql_client的使用

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

Flutter GraphQL客户端插件 flutter_graphql_client 的使用

flutter_graphql_client 是一个由Savannah Informatics Limited开源的项目,主要用于在Flutter应用中进行GraphQL和REST API调用。以下是该插件的安装、配置和使用方法。

安装指南

要将此包作为库使用,请在您的项目中添加依赖项:

使用Flutter命令行工具添加依赖

$ flutter pub add flutter_graphql_client

这将在您的项目的 pubspec.yaml 文件中添加以下行(并运行隐式的 dart pub get):

dependencies:
  flutter_graphql_client: ^0.2.2

或者,如果您的编辑器支持 flutter pub get,请按照编辑器的相关文档说明操作。

最后,在代码中导入该包:

import 'package:flutter_graphql_client/graph_client.dart';

如何使用这个包

进行GraphQL调用

可以使用如下方式发起GraphQL请求:

final dynamic data = await SimpleCall.callAPI(
    querystring: 'valid-query-string', // 替换为有效的查询字符串
    variables: <String, dynamic>{'pay': 'load'}, // 可选参数,根据需要提供变量
    graphClient: graphQlClientInstance, // 初始化好的GraphQL客户端实例
);

进行REST调用

GET请求

final dynamic data = await SimpleCall.callRestAPI(
    endpoint: 'http://example.com/test', // REST API端点
    method: 'GET',
    graphClient: graphQlClientInstance, // 初始化好的GraphQL客户端实例
);

POST请求

final dynamic data = await SimpleCall.callRestAPI(
    endpoint: 'http://example.com/test', // REST API端点
    method: 'POST',
    variables: <String, dynamic>{'pay': 'load'}, // 请求体数据
    graphClient: graphQlClientInstance, // 初始化好的GraphQL客户端实例
);

示例Demo

这里提供了一个简单的示例来展示如何初始化 graphQlClientInstance 并执行一个GraphQL查询:

import 'package:flutter/material.dart';
import 'package:flutter_graphql_client/graph_client.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Graphql Client Demo',
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  String _response = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    _fetchData();
  }

  Future<void> _fetchData() async {
    final graphQlClientInstance = GraphClient('https://your-graphql-endpoint'); // 初始化GraphQL客户端
    try {
      final dynamic data = await SimpleCall.callAPI(
        querystring: '{ hello }', // 简单的GraphQL查询
        graphClient: graphQlClientInstance,
      );
      setState(() {
        _response = data.toString();
      });
    } catch (e) {
      setState(() {
        _response = e.toString();
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GraphQL Example'),
      ),
      body: Center(
        child: Text(_response),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_graphql_client插件的详细代码示例。这个示例将展示如何配置GraphQL客户端,执行查询并处理响应。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_graphql_client: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 配置GraphQL客户端

接下来,你需要配置GraphQL客户端。这通常包括设置HTTP客户端、定义GraphQL端点以及配置缓存策略等。

import 'package:flutter_graphql_client/flutter_graphql_client.dart';
import 'package:http/http.dart' as http;

// GraphQL客户端配置
final HttpLink httpLink = HttpLink(
  uri: 'https://your-graphql-endpoint.com/graphql', // 替换为你的GraphQL端点
  httpClient: http.Client(),
);

final ValueNotifier<GraphQLClient> client = ValueNotifier(
  GraphQLClient(
    link: httpLink,
    cache: InMemoryCache(),
  ),
);

3. 定义GraphQL查询

定义一个GraphQL查询。例如,假设你有一个查询来获取用户信息:

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

4. 执行查询并处理响应

在你的Flutter组件中,使用GraphQLProvider包裹你的应用,并通过OperationQuery小部件执行查询。

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

void main() {
  runApp(
    GraphQLProvider(
      client: client,
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter GraphQL Client')),
        body: Center(
          child: UserInfoFetcher(),
        ),
      ),
    );
  }
}

class UserInfoFetcher extends StatefulWidget {
  @override
  _UserInfoFetcherState createState() => _UserInfoFetcherState();
}

class _UserInfoFetcherState extends State<UserInfoFetcher> {
  final String userId = '123'; // 替换为实际的用户ID

  @override
  Widget build(BuildContext context) {
    return Query(
      options: QueryOptions(
        document: gql(r'''
          query GetUser($id: ID!) {
            user(id: $id) {
              id
              name
              email
            }
          }
        '''),
        variables: {'id': userId},
      ),
      builder: (
        QueryResult result, {
        VoidCallback? refetch,
        FetchMore? fetchMore,
      }) {
        if (result.hasException) {
          return Text('Error: ${result.exception!.message}');
        }

        if (result.loading) {
          return CircularProgressIndicator();
        }

        if (result.data!['user'] == null) {
          return Text('User not found');
        }

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

5. 清理资源

在你的应用生命周期结束时,确保关闭HTTP客户端以释放资源:

@override
void dispose() {
  client.value.link.httpClient.close();
  client.dispose();
  super.dispose();
}

请注意,上面的dispose方法应该添加到你管理GraphQL客户端实例的生命周期管理部分,例如全局状态管理或顶层组件的dispose方法中。

这个示例展示了如何使用flutter_graphql_client插件在Flutter应用中执行GraphQL查询并处理响应。根据你的实际需求,你可以进一步扩展和自定义这个示例。

回到顶部