Flutter GraphQL客户端插件sunny_graphql的使用
Flutter GraphQL客户端插件sunny_graphql的使用
sunny_graphql
sunny_graphql
是一个用于在 Flutter 中实现 GraphQL 客户端功能的新包。通过该插件,您可以轻松地与 GraphQL 服务器进行交互。
使用步骤
以下是使用 sunny_graphql
的完整示例,包括安装、配置和执行查询的步骤。
1. 添加依赖
在您的 pubspec.yaml
文件中添加以下依赖:
dependencies:
sunny_graphql: ^1.0.0
然后运行以下命令以更新依赖项:
flutter pub get
2. 初始化GraphQL客户端
创建一个 GraphQLClient
实例来连接到您的 GraphQL 服务器。通常情况下,服务器的地址为 http://your-graphql-server/graphql
。
import 'package:flutter/material.dart';
import 'package:sunny_graphql/sunny_graphql.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: GraphQLExample(),
);
}
}
初始化 GraphQLClient
:
class GraphQLExample extends StatefulWidget {
[@override](/user/override)
_GraphQLExampleState createState() => _GraphQLExampleState();
}
class _GraphQLExampleState extends State<GraphQLExample> {
late GraphQLClient client;
[@override](/user/override)
void initState() {
super.initState();
// 创建GraphQL客户端实例
client = GraphQLClient(
endpoint: "http://your-graphql-server/graphql", // 替换为您的GraphQL服务器地址
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GraphQL Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await fetchData();
},
child: Text('Fetch Data'),
),
),
);
}
}
3. 执行GraphQL查询
通过 client.query()
方法执行 GraphQL 查询,并获取返回的数据。
Future<void> fetchData() async {
try {
// 定义GraphQL查询
final query = """
query GetPosts {
posts {
id
title
content
}
}
""";
// 执行查询
final response = await client.query(query);
// 检查是否有错误
if (response.hasErrors) {
print("Error: ${response.errors}");
return;
}
// 解析数据
final data = response.data['posts'];
print("Fetched Posts: $data");
} catch (e) {
print("Exception: $e");
}
}
4. 展示查询结果
将查询到的数据展示在界面上:
class GraphQLExample extends StatefulWidget {
[@override](/user/override)
_GraphQLExampleState createState() => _GraphQLExampleState();
}
class _GraphQLExampleState extends State<GraphQLExample> {
late GraphQLClient client;
List<Map<String, dynamic>>? posts;
[@override](/user/override)
void initState() {
super.initState();
client = GraphQLClient(
endpoint: "http://your-graphql-server/graphql",
);
}
Future<void> fetchData() async {
try {
final query = """
query GetPosts {
posts {
id
title
content
}
}
""";
final response = await client.query(query);
if (response.hasErrors) {
print("Error: ${response.errors}");
return;
}
setState(() {
posts = response.data['posts'] as List<Map<String, dynamic>>;
});
} catch (e) {
print("Exception: $e");
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GraphQL Example'),
),
body: Center(
child: ElevatedButton(
onPressed: fetchData,
child: Text('Fetch Data'),
),
),
floatingActionButton: FloatingActionButton(
onPressed: fetchData,
child: Icon(Icons.refresh),
),
bottomNavigationBar: posts == null
? Text("No data fetched yet.")
: ListView.builder(
itemCount: posts!.length,
itemBuilder: (context, index) {
final post = posts![index];
return ListTile(
title: Text(post['title']),
subtitle: Text(post['content']),
);
},
),
);
}
}
更多关于Flutter GraphQL客户端插件sunny_graphql的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GraphQL客户端插件sunny_graphql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sunny_graphql
是一个用于 Flutter 的 GraphQL 客户端插件,它可以帮助你轻松地与 GraphQL API 进行交互。以下是如何在 Flutter 项目中使用 sunny_graphql
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sunny_graphql
依赖:
dependencies:
flutter:
sdk: flutter
sunny_graphql: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 创建 GraphQL 客户端
接下来,你需要创建一个 GraphQL 客户端实例。通常,你需要在应用的某个地方(例如 main.dart
或一个单独的服务类中)初始化客户端。
import 'package:sunny_graphql/sunny_graphql.dart';
final GraphQLClient client = GraphQLClient(
link: HttpLink('https://your-graphql-endpoint.com/graphql'),
cache: GraphQLCache(),
);
3. 执行查询
你可以使用 client.query
方法来执行 GraphQL 查询。
import 'package:sunny_graphql/sunny_graphql.dart';
Future<void> fetchData() async {
const String query = '''
query GetUserData {
user {
id
name
email
}
}
''';
final QueryOptions options = QueryOptions(
document: gql(query),
);
final QueryResult result = await client.query(options);
if (result.hasException) {
print('Error: ${result.exception}');
} else {
print('Data: ${result.data}');
}
}
4. 执行 Mutation
你可以使用 client.mutate
方法来执行 GraphQL Mutation。
import 'package:sunny_graphql/sunny_graphql.dart';
Future<void> updateUserData() async {
const String mutation = '''
mutation UpdateUser($name: String!) {
updateUser(name: $name) {
id
name
}
}
''';
final MutationOptions options = MutationOptions(
document: gql(mutation),
variables: <String, dynamic>{
'name': 'New Name',
},
);
final QueryResult result = await client.mutate(options);
if (result.hasException) {
print('Error: ${result.exception}');
} else {
print('Updated Data: ${result.data}');
}
}
5. 使用 Subscription
sunny_graphql
也支持 GraphQL Subscription。你可以使用 client.subscribe
方法来订阅数据。
import 'package:sunny_graphql/sunny_graphql.dart';
Stream<QueryResult> subscribeToUserUpdates() {
const String subscription = '''
subscription OnUserUpdate {
userUpdate {
id
name
}
}
''';
final SubscriptionOptions options = SubscriptionOptions(
document: gql(subscription),
);
return client.subscribe(options);
}
6. 处理错误
在执行查询、Mutation 或 Subscription 时,务必处理可能出现的错误。你可以通过检查 QueryResult
的 hasException
属性来判断是否有错误,并通过 exception
属性获取错误信息。
7. 缓存和持久化
sunny_graphql
默认使用 GraphQLCache
来缓存查询结果。你可以根据需要自定义缓存策略,或者使用其他缓存实现。
8. 其他高级功能
sunny_graphql
还支持其他高级功能,如批量请求、文件上传、自定义链接等。你可以参考官方文档来了解更多细节。
9. 清理资源
在应用退出或不再需要 GraphQL 客户端时,记得清理资源,例如取消所有订阅。
client.dispose();
示例应用
以下是一个简单的 Flutter 应用示例,展示了如何使用 sunny_graphql
进行查询和 Mutation:
import 'package:flutter/material.dart';
import 'package:sunny_graphql/sunny_graphql.dart';
void main() {
final GraphQLClient client = GraphQLClient(
link: HttpLink('https://your-graphql-endpoint.com/graphql'),
cache: GraphQLCache(),
);
runApp(MyApp(client: client));
}
class MyApp extends StatelessWidget {
final GraphQLClient client;
MyApp({required this.client});
[@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: () => fetchData(client),
child: Text('Fetch Data'),
),
ElevatedButton(
onPressed: () => updateUserData(client),
child: Text('Update User'),
),
],
),
),
),
);
}
Future<void> fetchData(GraphQLClient client) async {
const String query = '''
query GetUserData {
user {
id
name
email
}
}
''';
final QueryOptions options = QueryOptions(
document: gql(query),
);
final QueryResult result = await client.query(options);
if (result.hasException) {
print('Error: ${result.exception}');
} else {
print('Data: ${result.data}');
}
}
Future<void> updateUserData(GraphQLClient client) async {
const String mutation = '''
mutation UpdateUser($name: String!) {
updateUser(name: $name) {
id
name
}
}
''';
final MutationOptions options = MutationOptions(
document: gql(mutation),
variables: <String, dynamic>{
'name': 'New Name',
},
);
final QueryResult result = await client.mutate(options);
if (result.hasException) {
print('Error: ${result.exception}');
} else {
print('Updated Data: ${result.data}');
}
}
}