Flutter GraphQL请求插件easy_graphql的使用
Flutter GraphQL 请求插件 easy_graphql 的使用
easy_graphql
是一个为 Flutter 提供简单易用接口的库,用于向 GraphQL API 发送查询、变更和订阅请求。
使用
创建 GraphqlClient
实例
要使用 easy_graphql
,首先需要创建一个 GraphqlClient
实例:
import 'package:easy_graphql/easy_graphql.dart';
final GraphqlClient client = GraphqlClient(
url: 'https://example.com/graphql',
token: 'your-auth-token',
);
GraphqlClient
构造函数接受两个参数:
url
(必需):GraphQL API 的 URL。token
(可选):每个请求附带的身份验证令牌。
发送查询
要发送 GraphQL 查询,调用 GraphqlClient
实例上的 query
方法:
final QueryResult result = await client.query('''
query {
users {
id
name
email
}
}
''');
query
方法接受两个参数:
query
(必需):要发送的 GraphQL 查询。variables
(可选):包含在查询中的变量。
query
方法返回一个包含查询结果的 QueryResult
。
发送变更
要发送 GraphQL 变更,调用 GraphqlClient
实例上的 mutate
方法:
final QueryResult result = await client.mutate('''
mutation {
createUser(name: "John", email: "john@example.com") {
id
name
email
}
}
''');
mutate
方法接受两个参数:
mutation
(必需):要发送的 GraphQL 变更。variables
(可选):包含在变更中的变量。
mutate
方法返回一个包含变更结果的 QueryResult
。
订阅
要订阅 GraphQL 订阅,调用 GraphqlClient
实例上的 subscribe
方法:
final Stream<QueryResult> stream = client.subscribe('''
subscription {
newUser {
id
name
email
}
}
''');
subscribe
方法接受两个参数:
subscription
(必需):要订阅的 GraphQL 订阅。variables
(可选):包含在订阅中的变量。
subscribe
方法返回一个包含订阅结果的 QueryResult
的流。
缓存查询结果
easy_graphql
自动缓存 GraphQL 查询的结果。要检索缓存的结果,调用 GraphQLCache
实例上的 readQuery
方法:
final QueryResult result = client.cache.readQuery('''
query {
users {
id
name
email
}
}
''');
readQuery
方法接受一个参数:
query
(必需):从缓存中检索的 GraphQL 查询。
readQuery
方法返回一个包含查询缓存结果的 QueryResult
。
完整示例 Demo
以下是一个完整的 Flutter 应用程序示例,演示如何使用 easy_graphql
库执行查询、变更和订阅。
import 'package:flutter/material.dart';
import 'package:easy_graphql/easy_graphql.dart';
import 'package:graphql/client.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
EasyGraphql _graphql = EasyGraphql(
url: 'https://api.example.com/graphql',
token: 'my_token',
);
String _query = '''
query GetUser(\$id: ID!) {
user(id: \$id) {
id
name
email
}
}
''';
String _mutation = '''
mutation UpdateUser(\$id: ID!, \$name: String!, \$email: String!) {
updateUser(id: \$id, name: \$name, email: \$email) {
id
name
email
}
}
''';
String _subscription = '''
subscription OnUserUpdate(\$id: ID!) {
userUpdate(id: \$id) {
id
name
email
}
}
''';
Future<void> _executeQuery() async {
final QueryResult result = await _graphql.query(
_query,
variables: {'id': '1'},
);
if (result.hasException) {
print(result.exception.toString());
} else {
print(result.data);
}
}
Future<void> _executeMutation() async {
final QueryResult result = await _graphql.mutate(
_mutation,
variables: {
'id': '1',
'name': 'John Doe',
'email': 'johndoe@example.com',
},
);
if (result.hasException) {
print(result.exception.toString());
} else {
print(result.data);
}
}
Stream<QueryResult> _executeSubscription() {
return _graphql.subscribe(
_subscription,
variables: {'id': '1'},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('GraphQL Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _executeQuery,
child: Text('Execute Query'),
),
ElevatedButton(
onPressed: _executeMutation,
child: Text('Execute Mutation'),
),
StreamBuilder<QueryResult>(
stream: _executeSubscription(),
builder: (BuildContext context,
AsyncSnapshot<QueryResult> snapshot) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
if (!snapshot.hasData) {
return Text('Loading...');
}
final QueryResult result = snapshot.data;
if (result.hasException) {
return Text('Exception: ${result.exception.toString()}');
} else {
return Text('Subscription: ${result.data}');
}
},
),
]),
),
));
}
}
更多关于Flutter GraphQL请求插件easy_graphql的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GraphQL请求插件easy_graphql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用easy_graphql
插件来进行GraphQL请求的示例代码。easy_graphql
是一个用于Flutter的GraphQL客户端库,它简化了与GraphQL服务器的交互。
首先,确保你已经在pubspec.yaml
文件中添加了easy_graphql
依赖:
dependencies:
flutter:
sdk: flutter
easy_graphql: ^x.y.z # 替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,下面是一个完整的示例,展示了如何使用easy_graphql
来发送GraphQL查询和变更请求。
1. 配置GraphQL客户端
创建一个GraphQL客户端配置类,这里假设你有一个GraphQL服务器URL。
import 'package:easy_graphql/easy_graphql.dart';
class GraphQLClientConfig {
static final EasyGraphQLClient client = EasyGraphQLClient(
endpoint: 'https://your-graphql-endpoint.com/graphql', // 替换为你的GraphQL服务器URL
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_ACCESS_TOKEN', // 如果有认证需求,添加相应的头信息
},
);
}
2. 定义GraphQL查询和变更请求
假设我们有一个简单的GraphQL查询来获取用户信息,以及一个变更请求来更新用户信息。
// 查询用户信息的GraphQL语句
const String getUserQuery = r'''
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}
''';
// 更新用户信息的GraphQL语句
const String updateUserMutation = r'''
mutation UpdateUser($id: ID!, $name: String!, $email: String!) {
updateUser(id: $id, name: $name, email: email) {
id
name
email
}
}
''';
3. 发送查询请求
使用定义的查询语句发送请求并处理响应。
import 'package:flutter/material.dart';
import 'package:easy_graphql/easy_graphql.dart';
import 'graphql_client_config.dart'; // 引入之前创建的客户端配置类
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
User? user;
@override
void initState() {
super.initState();
_fetchUserData();
}
Future<void> _fetchUserData() async {
try {
final result = await GraphQLClientConfig.client.query(
request: GraphQLRequest(
query: getUserQuery,
variables: {'id': 'user-id-123'}, // 替换为实际的用户ID
),
);
if (result.hasExceptions) {
throw result.exceptions!.first;
}
final data = result.data!['user'] as Map<String, dynamic>;
setState(() {
user = User.fromJson(data);
});
} catch (e) {
print('Error fetching user data: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('User Info')),
body: Center(
child: user == null
? CircularProgressIndicator()
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Name: ${user!.name}'),
Text('Email: ${user!.email}'),
],
),
),
),
);
}
}
class User {
final String id;
final String name;
final String email;
User({required this.id, required this.name, required this.email});
factory User.fromJson(Map<String, dynamic> json) {
return User(
id: json['id'] as String,
name: json['name'] as String,
email: json['email'] as String,
);
}
}
4. 发送变更请求
类似地,可以发送变更请求来更新用户信息。
Future<void> _updateUserData() async {
try {
final result = await GraphQLClientConfig.client.mutate(
request: GraphQLRequest(
query: updateUserMutation,
variables: {
'id': 'user-id-123', // 替换为实际的用户ID
'name': 'New User Name',
'email': 'newuser@example.com',
},
),
);
if (result.hasExceptions) {
throw result.exceptions!.first;
}
final data = result.data!['updateUser'] as Map<String, dynamic>;
print('User updated successfully: $data');
} catch (e) {
print('Error updating user data: $e');
}
}
你可以在按钮点击事件中调用_updateUserData()
函数来触发用户信息的更新。
ElevatedButton(
onPressed: _updateUserData,
child: Text('Update User'),
),
以上代码展示了如何在Flutter项目中使用easy_graphql
插件来进行GraphQL请求。你可以根据实际需求进一步扩展和修改这些代码。