主题
Flutter 项目示例

项目配置
安装、初始化和首次配置,请参考 Flutter 接入教程。
概述
本示例展示了如何在 Flutter/Dart 项目中集成 ApiSorcery。Flutter 是 Google 的 UI 工具包,用于从单一代码库构建移动、Web 和桌面的原生编译应用程序。
特性
- 跨平台开发:使用一套代码构建 iOS、Android、Web 和桌面应用
- 类型安全的 API 客户端:从 Swagger/OpenAPI 规范生成强类型的 Dart 类
- Dio 集成:内置支持 Dio HTTP 客户端,包含拦截器和错误处理
- 空安全:完全支持 Dart 的空安全特性
- Future/async 支持:原生 async/await 模式集成
功能演示
本示例应用基于真实后端 API,实现了完整的用户管理模块:
- 分页列表 — 无限滚动分页,支持按 code、姓名、状态条件过滤;支持下拉刷新
- 完整 CRUD — 新增、查看、编辑、删除用户记录
- 头像上传 — 通过
POST /file/upload上传图片,含 10 MB 大小校验 - Excel 导出 — 全平台(Web/iOS/Android/桌面)下载过滤结果为
.xlsx文件 - 字段验证 — 表单提交前异步检查
code字段是否已存在
代码示例
分页查询
dart
import 'package:autoapi_example_flutter/apis/auto/demo/api_user.dart';
import 'package:autoapi_example_flutter/apis/auto/demo/model.dart';
Future<void> fetchUsers({ required int page, String? code, String? name }) async {
final params = UserPageQueryDto(
pagination: Pagination(page: page, limit: 10),
code: code,
name: name,
);
final res = await ApiUser.getUserPaged(params);
final users = res.results ?? <UserInfoDto>[];
final totalPages = ((res.total ?? 0) / 10).ceil();
}头像上传
dart
import 'package:autoapi_example_flutter/apis/auto/demo/api_file.dart';
import 'package:autoapi_example_flutter/apis/auto/demo/model.dart';
Future<String?> uploadAvatar(MultipartFile file) async {
const maxBytes = 10 * 1024 * 1024; // 10 MB
if (file.length > maxBytes) {
throw Exception('文件大小超过 10 MB 限制');
}
final fileId = await ApiFile.uploadFile(UploadFileRequest(file: file));
return '${Config.apiHost}/file/$fileId';
}Excel 导出
dart
import 'package:autoapi_example_flutter/apis/auto/demo/api_user.dart';
import 'package:autoapi_example_flutter/apis/auto/demo/model.dart';
Future<void> exportUsers({ String? code, String? name }) async {
final blobRes = await ApiUser.exportUsers(
ExportUsersRequest(code: code ?? '', name: name ?? ''),
);
// blobRes.data 为文件字节,blobRes.name 为建议文件名
await saveFile(blobRes.data!, blobRes.name ?? 'users.xlsx');
}平台特定注意事项
移动端(iOS/Android)
- 在平台特定文件中配置网络权限
- 处理 HTTP 端点的网络安全配置
Web
- 在后端服务器上正确配置 CORS
- 考虑某些 HTTP 功能的 Web 特定限制
桌面
- 原生网络功能开箱即用
- 如需要,考虑平台特定的证书处理
最佳实践
- 错误处理:使用适当的异常类型实现全面的错误处理
- 状态管理:与您首选的状态管理解决方案集成(Provider、Bloc、Riverpod)
- 缓存:使用 Dio 拦截器实现适当的缓存策略
- 测试:使用 mockito 为您的 API 客户端编写单元测试
- 代码生成:使用
build_runner进行 JSON 序列化代码生成