Flutter GraphQL重连插件gql_phoenix_link_2的使用
Flutter GraphQL重连插件gql_phoenix_link_2的使用
使用说明
gql_phoenix_link_2
是一个基于 Phoenix Channels 的实验性 GraphQL Link。它支持查询(queries)、变更(mutations)和订阅(subscriptions)。
信息
该插件替代了已废弃的 gql_phoenix_link
库(https://pub.dev/packages/gql_phoenix_link)。
完整示例 Demo
以下是一个完整的示例,展示如何在 Flutter 中使用 gql_phoenix_link_2
插件来实现 GraphQL 查询、变更和订阅。
1. 添加依赖
在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
graphql_flutter: ^5.0.0+1
gql_phoenix_link_2: ^1.0.0
运行 flutter pub get
安装依赖。
2. 配置 Phoenix Channel 和 GraphQL Client
创建一个 Phoenix Channel 并将其与 GraphQL Client 结合使用。
import 'package:flutter/material.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:gql_phoenix_link_2/gql_phoenix_link_2.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: GraphQLExample(),
);
}
}
class GraphQLExample extends StatefulWidget {
@override
_GraphQLExampleState createState() => _GraphQLExampleState();
}
class _GraphQLExampleState extends State<GraphQLExample> {
late ValueNotifier<GraphQLClient> client;
@override
void initState() {
super.initState();
// 创建 Phoenix Channel
final channel = PhoenixChannel(
"ws://localhost:4000/socket", // Phoenix WebSocket 地址
"auth_token", // 认证令牌
);
// 创建 GraphQL Link
final link = PhoenixLink(channel);
// 创建 GraphQL Client
client = ValueNotifier(
GraphQLClient(
link: link,
cache: GraphQLCache(),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("GraphQL Example"),
),
body: Query(
client: client.value,
options: QueryOptions(
document: gql("""
query GetTodos {
todos {
id
title
}
}
"""),
),
builder: (QueryResult result, {fetchMore, refetch}) {
if (result.isLoading) {
return Center(child: CircularProgressIndicator());
}
if (result.hasException) {
return Center(child: Text(result.exception.toString()));
}
return ListView.builder(
itemCount: result.data?['todos'].length ?? 0,
itemBuilder: (context, index) {
final todo = result.data?['todos'][index];
return ListTile(
title: Text(todo['title']),
);
},
);
},
),
);
}
}
3. 代码解析
-
Phoenix Channel
创建一个PhoenixChannel
对象,指定 WebSocket 地址和认证令牌。final channel = PhoenixChannel( "ws://localhost:4000/socket", "auth_token", );
-
Phoenix Link
将PhoenixChannel
包装为PhoenixLink
,用于与 GraphQL 进行通信。final link = PhoenixLink(channel);
-
GraphQL Client
使用GraphQLClient
配置 GraphQL 客户端,并将PhoenixLink
设置为链接。client = ValueNotifier( GraphQLClient( link: link, cache: GraphQLCache(), ), );
-
Query 操作
使用Query
小部件执行 GraphQL 查询。Query( client: client.value, options: QueryOptions( document: gql(""" query GetTodos { todos { id title } } """), ), builder: (QueryResult result, {fetchMore, refetch}) { // 处理加载状态、异常和数据 }, )
更多关于Flutter GraphQL重连插件gql_phoenix_link_2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
gql_phoenix_link_2
是一个用于 Flutter 的 GraphQL 插件,它基于 gql_link
和 phoenix_channels
,允许你在 Flutter 应用中实现 GraphQL 的自动重连功能。这个插件特别适用于使用 Phoenix Channels 作为传输层的 GraphQL 服务。
安装
首先,你需要在 pubspec.yaml
文件中添加依赖:
dependencies:
gql_phoenix_link_2: ^1.0.0
gql: ^0.13.0
flutter:
sdk: flutter
然后运行 flutter pub get
来安装依赖。
基本使用
-
创建 Phoenix Socket
首先,你需要创建一个
PhoenixSocket
实例,用于与 Phoenix 服务器建立 WebSocket 连接。import 'package:phoenix_socket/phoenix_socket.dart'; final phoenixSocket = PhoenixSocket( 'ws://your-server.com/socket/websocket', );
-
创建 PhoenixLink
使用
PhoenixSocket
创建PhoenixLink
实例。PhoenixLink
是gql_link
的一个实现,用于处理 GraphQL 请求。import 'package:gql_phoenix_link_2/gql_phoenix_link_2.dart'; final phoenixLink = PhoenixLink( phoenixSocket, channelName: 'your_channel_name', );
-
创建 GraphQL Client
使用
PhoenixLink
创建一个GraphQLClient
实例。import 'package:gql_exec/gql_exec.dart'; import 'package:gql_link/gql_link.dart'; import 'package:gql_http_link/gql_http_link.dart'; final client = GraphQLClient( link: phoenixLink, cache: GraphQLCache(), );
-
发送 GraphQL 请求
现在你可以使用
GraphQLClient
发送 GraphQL 请求了。final query = gql(''' query { yourQuery { field1 field2 } } '''); final result = await client.query(QueryOptions(document: query)); if (result.hasException) { print('Error: ${result.exception}'); } else { print('Data: ${result.data}'); }
自动重连
gql_phoenix_link_2
的一个主要功能是自动重连。当 WebSocket 连接断开时,PhoenixSocket
会自动尝试重新连接。你不需要手动处理重连逻辑。
处理连接状态
你可以监听 PhoenixSocket
的连接状态来执行一些自定义逻辑。
phoenixSocket.status.listen((status) {
print('Socket status: $status');
if (status == PhoenixSocketStatus.open) {
// 连接成功
} else if (status == PhoenixSocketStatus.closed) {
// 连接关闭
}
});