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,
    );
  }
}