You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:05:00