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

如何使用Flutter Amplify访问AWS AppSync服务?

基于flutter_amplify访问AWS AppSync GraphQL API 实现指南

前置准备

  • 已部署完成的AWS AppSync GraphQL API端点、授权模式(API密钥/Cognito/IAM等)对应鉴权信息
  • Flutter 2.0+ 开发环境
  • 现有项目可正常编译运行

步骤1:安装依赖

在项目pubspec.yaml中添加对应依赖:

dependencies:
  flutter:
    sdk: flutter
  amplify_flutter: ^1.0.0 # 替换为当前最新稳定版
  amplify_api: ^1.0.0 # 替换为当前最新稳定版

添加完成后执行flutter pub get完成依赖安装。

步骤2:配置Amplify

你已经有部署完成的AppSync API,无需重新通过Amplify CLI推送资源,直接将已有的amplifyconfiguration.dart配置文件放入项目lib目录下即可。
在应用初始化阶段完成Amplify配置,参考main.dart代码:

import 'package:flutter/material.dart';
import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_api/amplify_api.dart';
import 'amplifyconfiguration.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 注册API插件
  await Amplify.addPlugin(AmplifyAPI());
  // 加载配置
  try {
    await Amplify.configure(amplifyconfig);
  } on AmplifyAlreadyConfiguredException {
    safePrint("Amplify已完成配置,无需重复初始化");
  }
  runApp(const MyApp());
}

如果你的API使用Cognito用户池、IAM等非API密钥授权模式,需要先完成对应Auth插件的配置和用户登录流程,再发起API请求,否则会返回权限错误。

步骤3:实现GraphQL请求

查询(Query)示例

Future<void> fetchData() async {
  try {
    // 替换为你自己业务对应的查询语句
    const query = '''
      query ListItems {
        listItems {
          items {
            id
            name
            createTime
          }
        }
      }
    ''';
    final request = GraphQLRequest<String>(document: query);
    final response = await Amplify.API.query(request: request).response;
    if (response.data != null) {
      safePrint("查询成功,返回数据:${response.data}");
      // 此处可将返回JSON转换为Dart实体类处理
    } else {
      safePrint("查询错误:${response.errors}");
    }
  } catch (e) {
    safePrint("请求异常:$e");
  }
}

变更(Mutation)示例

Future<void> createItem(String name) async {
  try {
    // 替换为你自己业务对应的变更语句
    const mutation = '''
      mutation CreateItem(\$name: String!) {
        createItem(input: {name: \$name}) {
          id
          name
          createTime
        }
      }
    ''';
    final request = GraphQLRequest<String>(
      document: mutation,
      variables: {'name': name},
    );
    final response = await Amplify.API.mutate(request: request).response;
    if (response.data != null) {
      safePrint("创建成功,返回数据:${response.data}");
    } else {
      safePrint("创建错误:${response.errors}");
    }
  } catch (e) {
    safePrint("请求异常:$e");
  }
}

订阅(Subscription)示例

如果你的API开启了实时推送能力,可通过订阅接收实时通知:

StreamSubscription<GraphQLResponse<String>>? subscription;

void listenItemCreate() {
  // 替换为你自己业务对应的订阅语句
  const subscriptionDoc = '''
    subscription OnCreateItem {
      onCreateItem {
        id
        name
        createTime
      }
    }
  ''';
  final request = GraphQLRequest<String>(document: subscriptionDoc);
  subscription = Amplify.API.subscribe(request: request).listen(
    (event) {
      if (event.data != null) {
        safePrint("收到实时推送:${event.data}");
      }
    },
    onError: (e) => safePrint("订阅异常:$e"),
  );
}

// 页面销毁/不需要订阅时记得取消
@override
void dispose() {
  subscription?.cancel();
  super.dispose();
}

优化提示

如果你的GraphQL Schema结构复杂,可通过Amplify CLI的amplify codegen models命令自动生成对应Dart实体类,无需手动编写JSON解析逻辑。

内容的提问来源于stack exchange,提问作者WakkaoW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:04