pollTaskStatus static method
Future<VideoTaskStatusResult>
pollTaskStatus(})
轮询查询视频生成状态,直到完成或超时
taskId 任务ID
onProgress 进度回调函数
language 语言代码(可选,默认根据系统语言)
timeoutSeconds 超时时间(秒),默认5分钟
返回最终的 VideoTaskStatusResult
Implementation
static Future<VideoTaskStatusResult> pollTaskStatus(
String taskId, {
void Function(VideoTaskStatusResult)? onProgress,
String? language,
int timeoutSeconds = _pollTimeoutSeconds,
}) async {
final lang = language ?? PlatformDispatcher.instance.locale.languageCode;
final i18n = ShopPageI18n(lang);
final startTime = DateTime.now();
int attempts = 0;
while (true) {
attempts++;
final elapsed = DateTime.now().difference(startTime).inSeconds;
print('${i18n.get('video_polling_status')} (第 $attempts ${i18n.get('video_attempts')}, ${i18n.get('video_elapsed')} ${elapsed}${i18n.get('video_seconds')}): $taskId');
final statusResult = await getTaskStatus(taskId, language: lang);
// 调用进度回调
if (onProgress != null) {
onProgress(statusResult);
}
// 检查任务状态
switch (statusResult.status) {
case VideoTaskStatus.succeeded:
print('${i18n.get('video_task_completed')}: ${statusResult.message}');
return statusResult;
case VideoTaskStatus.failed:
print('${i18n.get('video_task_failed')}: ${statusResult.error ?? statusResult.message}');
return statusResult;
case VideoTaskStatus.pending:
case VideoTaskStatus.running:
// 检查是否超时
if (elapsed >= timeoutSeconds) {
print('${i18n.get('video_polling_timeout')}:已超过 ${timeoutSeconds}${i18n.get('video_seconds')}');
return VideoTaskStatusResult(
success: false,
taskId: taskId,
status: VideoTaskStatus.timeout,
message: i18n.get('video_timeout_message'),
error: '${i18n.get('video_timeout_error_prefix')}${elapsed}${i18n.get('video_timeout_error_suffix')}',
);
}
// 继续轮询
print('${i18n.get('video_task_in_progress')}: ${statusResult.message} (进度: ${statusResult.progress ?? 0}%)');
await Future.delayed(Duration(seconds: _pollIntervalSeconds));
break;
case VideoTaskStatus.timeout:
print(i18n.get('video_polling_timeout'));
return statusResult;
}
}
}