Flutter for OpenHarmony 实战:通义万相 AIGC 联调与相册持久化
摘要:行百里者半九十。本文作为'疯狂头像'(Crazy Avatar)实战系列的终章,我们将完成从 AI 异步生成到图片系统级保存的全链路闭环。本文将重点攻克鸿蒙(HarmonyOS)侧的
module.json5权限合规、媒体库写入逻辑及网络请求健壮性处理,助你打造商业级 AIGC 应用。
前言
在之前的动效篇中,我们为应用注入了生动的灵魂。但一个真正的 AI 工具,如果不能产生'作品'并持久化到物理存储,它就只是一个精致的'空中楼阁'。
在鸿蒙(HarmonyOS Next)生态中,文件的存储安全与权限管理有着极其严格的标准。本篇我们将打通阿里云通义万相的 API 联调,并深度解析如何调用鸿蒙底层能力,将创意艺术品永久存入用户相册。
零、开发环境与前置准备
为了确保代码能够准确运行,请参考以下实战环境配置:
| 环境项 | 版本/要求 | 备注 |
|---|---|---|
| Flutter SDK | 3.7.12-ohos | HarmonyOS 适配版 |
| DevEco Studio | 4.1 Release | 对应 HarmonyOS Next API 11+ |
| API 服务 | 阿里云 DashScope | 需开启通义万相模型权限 |
| 核心依赖 | http, saver_gallery | 详见第一篇架构篇配置 |
一、AI 服务联调:接入阿里云通义万相

通义万相提供了基于 Messages 的多模态生成接口。在鸿蒙上,我们主要处理异步的 POST 请求。
1.1 封装 AI 绘图服务
为了提升请求的健壮性,我们引入了超时处理逻辑。

Future<String> generateImage({
required String prompt,
required String apiKey,
String model = "qwen-image-max",
}) async {
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $apiKey',
};
final body = jsonEncode({
"model": model,
"input": {
"messages": [
{
"role": "user",
"content": [{"text": prompt}]
}
]
},
"parameters": {
"size": "1024*1024",
"n": 1
}
});
try {
// 🟢 增加 30 秒超时处理,适配 AI 生成的长周期特性
final response = await http
.post(Uri.parse(_baseUrl), headers: headers, body: body)
.timeout(const Duration(seconds: 30));
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
return data['output']['choices'][0]['message']['content'][0]['image'];
} else {
throw "生成失败:Code ${response.statusCode}";
}
} on TimeoutException {
throw "请求超时,AI 绘画可能需要更多时间,请检查网络";
} catch (e) {
throw "服务异常:$e";
}
}




