getTaskStatus static method
查询视频生成任务状态
taskId 任务ID
language 语言代码(可选,默认根据系统语言)
返回 VideoTaskStatusResult 包含任务状态、进度等信息
Implementation
static Future<VideoTaskStatusResult> getTaskStatus(
String taskId, {
String? language,
}) async {
final lang = language ?? PlatformDispatcher.instance.locale.languageCode;
final i18n = ShopPageI18n(lang);
try {
print('${i18n.get('video_querying_status')}: $taskId');
final response = await http.get(
Uri.parse('${EnvironmentConfig.baseUrl}/api/shopping/action?taskId=$taskId'),
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
);
print('📥 任务状态响应: ${response.statusCode}');
if (response.statusCode == 200) {
final result = jsonDecode(utf8.decode(response.bodyBytes)) as Map<String, dynamic>;
if (result['success'] == true) {
final data = result['data'] as Map<String, dynamic>;
final statusString = data['status'] as String;
final mappedStatus = VideoTaskStatus.fromString(statusString);
print('📊 任务状态: $statusString -> ${mappedStatus.value}');
print('📈 进度: ${data['progress']}%');
return VideoTaskStatusResult(
success: true,
taskId: data['task_id'] as String,
status: mappedStatus,
progress: (data['progress'] as num?)?.toDouble(),
message: data['message'] as String,
videoUrl: data['video_url'] as String?,
analysis: data['analysis'] as Map<String, dynamic>?,
script: data['script'] as Map<String, dynamic>?,
error: data['error'] as String?,
createdAt: data['created_at'] as String?,
updatedAt: data['updated_at'] as String?,
);
} else {
return VideoTaskStatusResult(
success: false,
taskId: taskId,
status: VideoTaskStatus.failed,
message: result['message'] as String? ?? i18n.get('video_query_failed'),
error: result['error'] as String?,
);
}
} else {
return VideoTaskStatusResult(
success: false,
taskId: taskId,
status: VideoTaskStatus.failed,
message: '${i18n.get('video_server_error')} (${response.statusCode})',
error: 'HTTP ${response.statusCode}',
);
}
} catch (e) {
print('❌ 查询任务状态失败: $e');
return VideoTaskStatusResult(
success: false,
taskId: taskId,
status: VideoTaskStatus.failed,
message: i18n.get('video_query_failed'),
error: e.toString(),
);
}
}