generateVideo static method
生成试衣视频(异步任务)
tryonImageUrl 试衣图片URL(必填)
sessionId 会话ID(可选)
language 语言代码(可选,默认根据系统语言)
duration 视频时长,默认5秒
resolution 视频分辨率,默认1080P
audio 是否添加音频,默认true
返回 VideoTaskResult 包含任务ID,可用于查询状态
Implementation
static Future<VideoTaskResult> generateVideo({
required String tryonImageUrl,
String? sessionId,
String? language,
int duration = 5,
String resolution = '1080P',
bool audio = true,
}) async {
// 获取语言
final lang = language ?? PlatformDispatcher.instance.locale.languageCode;
final i18n = ShopPageI18n(lang);
try {
// 构建请求参数
final requestData = {
'action': 'generate_video',
'data': {
'tryon_image_url': tryonImageUrl,
'duration': duration,
'resolution': resolution,
'audio': audio,
},
'context': {
'language': lang,
if (sessionId != null) 'session_id': sessionId,
},
};
print('📤 发送视频生成请求: ${requestData['action']}');
// 调用API
final response = await http.post(
Uri.parse('${EnvironmentConfig.baseUrl}/api/shopping/action'),
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(requestData),
);
print('📥 视频生成响应状态: ${response.statusCode}');
if (response.statusCode == 200) {
final result = jsonDecode(utf8.decode(response.bodyBytes)) as Map<String, dynamic>;
if (result['success'] == true) {
// 成功响应 - 返回任务ID
final data = result['data'] as Map<String, dynamic>;
return VideoTaskResult(
success: true,
message: data['message'] as String? ?? i18n.get('video_task_created'),
taskId: data['task_id'] as String?,
status: data['status'] != null
? VideoTaskStatus.fromString(data['status'] as String)
: VideoTaskStatus.pending,
);
} else {
// 失败响应
final data = result['data'] as Map<String, dynamic>;
return VideoTaskResult(
success: false,
message: data['message'] as String? ?? i18n.get('video_task_creation_failed'),
error: data['error'] as String?,
status: VideoTaskStatus.failed,
);
}
} else {
// HTTP错误
return VideoTaskResult(
success: false,
message: '${i18n.get('video_server_error')} (${response.statusCode})',
error: 'HTTP ${response.statusCode}: ${response.body}',
status: VideoTaskStatus.failed,
);
}
} catch (e) {
// 异常处理
print('❌ 视频生成失败: $e');
return VideoTaskResult(
success: false,
message: i18n.get('video_generation_failed'),
error: e.toString(),
status: VideoTaskStatus.failed,
);
}
}