如何在Flutter应用中集成GraphQL API?新手入门指导求助
Flutter集成GraphQL入门指南(零基础适配)
一、先搞懂核心基础(不用深钻,先搭认知)
- GraphQL是什么:和REST接口不同,它是一种查询语言——你要什么数据就请求什么,不用接收多余字段,一个接口就能满足多种数据需求。
- 核心术语记3个就行:
- Query:查数据(对应REST的GET)
- Mutation:改数据(对应REST的POST/PUT/DELETE)
- Schema:服务端定义的数据规则,相当于接口说明书
二、实操步骤:从0到1集成
1. 加依赖
在项目的pubspec.yaml里添加最常用的graphql_flutter包:
dependencies: flutter: sdk: flutter graphql_flutter: ^5.1.2 # 换成pub上的最新版本号
然后执行flutter pub get安装。
2. 初始化GraphQL客户端
在main.dart里配置客户端,连接你的API地址:
import 'package:flutter/material.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; void main() { // 配置API链接 final HttpLink httpLink = HttpLink('https://你的GraphQL接口地址/graphql'); // 创建客户端 final client = ValueNotifier( GraphQLClient( link: httpLink, cache: GraphQLCache(store: HiveStore()), // 默认缓存,新手不用改 ), ); // 把客户端注入整个App runApp( GraphQLProvider( client: client, child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp(title: 'GraphQL Demo', home: HomePage()); } }
3. 发送第一个查询(Query)
比如查用户列表,用Query组件实现:
class HomePage extends StatelessWidget { // 定义查询语句,要什么字段写什么 final String getUsersQuery = ''' query GetUsers { users { id name email } } '''; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('用户列表')), body: Query( options: QueryOptions(document: gql(getUsersQuery)), builder: (result, {refetch, fetchMore}) { // 处理加载状态 if (result.isLoading) return Center(child: CircularProgressIndicator()); // 处理异常 if (result.hasException) return Center(child: Text(result.exception.toString())); // 解析数据并渲染 final users = result.data?['users'] ?? []; return ListView.builder( itemCount: users.length, itemBuilder: (context, index) { final user = users[index]; return ListTile(title: Text(user['name']), subtitle: Text(user['email'])); }, ); }, ), ); } }
4. 发送修改请求(Mutation)
比如创建新用户,用Mutation组件:
class CreateUserPage extends StatelessWidget { final _nameCtrl = TextEditingController(); final _emailCtrl = TextEditingController(); // 定义修改语句,参数用$开头 final String createUserMutation = ''' mutation CreateUser(\$name: String!, \$email: String!) { createUser(name: \$name, email: \$email) { id name } } '''; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('创建用户')), body: Padding( padding: EdgeInsets.all(16), child: Column( children: [ TextField(controller: _nameCtrl, hintText: '输入姓名'), TextField(controller: _emailCtrl, hintText: '输入邮箱'), SizedBox(height: 20), Mutation( options: MutationOptions( document: gql(createUserMutation), onCompleted: (data) { print('创建成功:${data?['createUser']['name']}'); Navigator.pop(context); }, ), builder: (runMutation, result) { return ElevatedButton( onPressed: () => runMutation({ 'name': _nameCtrl.text, 'email': _emailCtrl.text, }), child: Text('提交'), ); }, ), ], ), ), ); } }
三、新手学习资源(无外链,直接搜就能找到)
graphql_flutter官方文档:去pub.dev搜这个包,看README里的示例和API说明,最权威。- GraphQL基础入门:先花1小时看GraphQL官方的基础教程,搞懂Query和Mutation的逻辑,不用写代码。
- Flutter实战示例:搜“Flutter GraphQL todo”,找社区里的开源小项目,直接运行看效果。
- 视频教程:B站搜“Flutter GraphQL入门”,跟着up主敲代码,上手最快。
四、避坑提醒
- 先默认缓存,别一开始就折腾缓存优化,等熟悉了再调。
- 先用Postman测试你的GraphQL接口,确认能正常返回数据,再集成到Flutter里。
- 一定要处理加载和异常状态,不然容易出现白屏或崩溃。
内容的提问来源于stack exchange,提问作者Yassal Ahmad
相关产品推荐
相关产品推荐

