Flutter GraphQL集成插件nhost_gql_links的使用
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
更多关于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获取的用户信息。
注意事项
- 安全性:不要在客户端代码中硬编码你的
clientSecret
。在实际应用中,你应该使用环境变量或安全的密钥管理服务来管理这些敏感信息。 - 错误处理:在生产环境中,你应该添加更多的错误处理和日志记录。
- 缓存和性能:考虑使用GraphQL缓存策略来优化性能和用户体验。
这个示例提供了一个基本的集成方法,你可以根据需要进行扩展和自定义。