Flutter GraphQL集成插件nhost_gql_links的使用

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

Flutter GraphQL集成插件nhost_gql_links的使用

Nhost GraphQL Links

Nhost GraphQL Links 是一个用于构建与 Nhost 兼容的、库无关的 GraphQL 链接的包。这个包通常由 nhost_graphql_adapter 使用,一般情况下不建议直接使用。

开始使用

最新版本

pubspec.yaml 文件中添加以下依赖:

dependencies:
  nhost_gql_links: ^3.0.0

示例代码

以下是一个完整的示例,展示了如何使用 nhost_gql_links 包来创建一个 GraphQL 客户端,并查询 todos 表中的数据。这个示例假设你已经按照 Nhost 快速入门 创建了一个 todos 表。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 nhost_gql_links 和其他必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  graphql: ^5.0.0
  http_link: ^2.0.0
  nhost_gql_links: ^3.0.0

2. 创建 GraphQL 客户端

接下来,创建一个 Dart 文件(例如 graphql_client.dart),并在其中配置 GraphQL 客户端:

import 'package:graphql/client.dart';
import 'package:nhost_gql_links/nhost_gql_links.dart';
import 'package:http_link/http_link.dart';

class GraphQLClientConfig {
  static final String nhostUrl = 'https://your-nhost-url'; // 替换为你的 Nhost URL

  static Link getHttpLink() {
    return HttpLink('$nhostUrl/v1/graphql');
  }

  static Link getAuthLink(String jwtToken) {
    return NhostAuthLink(
      baseUrl: nhostUrl,
      jwtToken: jwtToken,
    );
  }

  static GraphQLClient getGraphQLClient(String jwtToken) {
    final Link link = getAuthLink(jwtToken).concat(getHttpLink());

    return GraphQLClient(
      link: link,
      cache: GraphQLCache(),
    );
  }
}

3. 查询 todos

现在,你可以使用创建的 GraphQL 客户端来查询 todos 表。创建一个新的 Dart 文件(例如 todo_service.dart),并在其中编写查询逻辑:

import 'package:graphql/client.dart';
import 'graphql_client.dart';

class TodoService {
  final GraphQLClient _client;

  TodoService(this._client);

  Future<List<Map<String, dynamic>>> fetchTodos() async {
    final QueryOptions options = QueryOptions(
      document: gql(r'''
        query GetTodos {
          todos {
            id
            title
            is_completed
          }
        }
      '''),
    );

    final QueryResult result = await _client.query(options);

    if (result.hasException) {
      throw Exception('Failed to fetch todos: ${result.exception.toString()}');
    }

    return result.data?['todos'] as List<Map<String, dynamic>>;
  }
}

4. 在 Flutter 应用中使用

最后,在你的 Flutter 应用中使用 TodoService 来获取和显示 todos 数据。创建一个新的页面(例如 todo_page.dart),并在其中调用 fetchTodos 方法:

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

class TodoPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final String jwtToken = 'your-jwt-token'; // 替换为你的 JWT Token
    final GraphQLClient client = GraphQLClientConfig.getGraphQLClient(jwtToken);
    final TodoService todoService = TodoService(client);

    return Scaffold(
      appBar: AppBar(
        title: Text('Todos'),
      ),
      body: FutureBuilder<List<Map<String, dynamic>>>(
        future: todoService.fetchTodos(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return Center(child: Text('Error: ${snapshot.error}'));
          } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
            return Center(child: Text('No todos found'));
          } else {
            return ListView.builder(
              itemCount: snapshot.data!.length,
              itemBuilder: (context, index) {
                final todo = snapshot.data![index];
                return ListTile(
                  title: Text(todo['title']),
                  subtitle: Text(todo['is_completed'] ? 'Completed' : 'Not Completed'),
                );
              },
            );
          }
        },
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成并使用nhost_gql_links插件的示例代码。nhost_gql_links是一个用于与NHost GraphQL API交互的Flutter插件。假设你已经有一个NHost项目并且已经配置了GraphQL API。

1. 添加依赖

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

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

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

2. 配置NHost客户端

你需要提供NHost项目的相关配置,比如项目ID和API密钥。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 配置NHost客户端
    final NHostClient nhostClient = NHostClient(
      projectId: 'your_project_id',  // 替换为你的项目ID
      clientSecret: 'your_client_secret',  // 替换为你的客户端密钥
    );

    // 使用NHostClient创建GraphQL客户端
    final NHostGraphQLClient graphQLClient = NHostGraphQLClient(nhostClient);

    return MaterialApp(
      home: GraphQLScreen(graphQLClient: graphQLClient),
    );
  }
}

3. 创建GraphQL查询

接下来,你可以定义一个GraphQL查询,并在你的Flutter组件中使用它。

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

class GraphQLScreen extends StatelessWidget {
  final NHostGraphQLClient graphQLClient;

  GraphQLScreen({required this.graphQLClient});

  @override
  Widget build(BuildContext context) {
    // 定义一个GraphQL查询
    final String query = """
      query GetUser {
        user {
          id
          email
          name
        }
      }
    """;

    // 使用GraphQLProvider和GraphQLQuery组件来执行查询
    return GraphQLProvider(
      client: graphQLClient,
      child: Scaffold(
        appBar: AppBar(
          title: Text('GraphQL Integration'),
        ),
        body: GraphQLQuery(
          query: query,
          builder: (
            RunQueryResult<Map<String, dynamic>> result, {
            VoidCallback refetch,
            FetchMoreOptions? fetchMoreOptions,
          }) {
            if (result.loading) {
              return Center(child: CircularProgressIndicator());
            }
            if (result.error != null) {
              return Center(child: Text('Error: ${result.error!.message}'));
            }

            // 提取数据并显示
            final user = result.data?['user'];
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('ID: ${user?['id']}'),
                  Text('Email: ${user?['email']}'),
                  Text('Name: ${user?['name']}'),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

4. 运行你的应用

确保你已经启动了NHost后端服务,然后运行你的Flutter应用。你应该能够看到一个屏幕,显示从NHost GraphQL API获取的用户信息。

注意事项

  1. 安全性:不要在客户端代码中硬编码你的clientSecret。在实际应用中,你应该使用环境变量或安全的密钥管理服务来管理这些敏感信息。
  2. 错误处理:在生产环境中,你应该添加更多的错误处理和日志记录。
  3. 缓存和性能:考虑使用GraphQL缓存策略来优化性能和用户体验。

这个示例提供了一个基本的集成方法,你可以根据需要进行扩展和自定义。

回到顶部