This commit is contained in:
Developer
2026-06-17 08:48:44 +08:00
parent 544f77c0ce
commit 70830b0991

View File

@@ -3,8 +3,8 @@
/// 创建时间: 2026-06-04
/// 更新时间: 2026-06-17
/// 作用: 解决鸿蒙端的已知兼容性问题
/// 上次更新: 新增saveVideoToGalleryCompat视频保存兼容方法
/// 修复鸿蒙端gal插件不可用导致的相册保存失败
/// 上次更新: saveImageToGalleryCompat/saveVideoToGalleryCompat非鸿蒙端改为调用Gal原生保存
/// 使方法成为真正的跨平台兼容方法,消除调用方必须预判断平台的隐患
/// ============================================================
import 'dart:io';
@@ -12,6 +12,7 @@ import 'dart:io';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:gal/gal.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
@@ -197,11 +198,26 @@ class OhosCompatibilityHelper {
// 图片保存兼容 (任务A2 - 日签卡片保存按钮)
// ============================================================
/// OHOS平台兼容的图片保存方法
/// gal插件不支持OHOS使用系统分享作为替代方案
/// 平台兼容的图片保存方法
///
/// - 鸿蒙端gal插件不支持使用系统分享作为替代方案
/// - 非鸿蒙端iOS/Android/macOS调用 gal 原生保存到相册
/// - Web端返回 false不支持
///
/// 调用方无需预判断平台,方法内部统一分发。
static Future<bool> saveImageToGalleryCompat(Uint8List imageBytes) async {
if (kIsWeb) return false;
if (!isOhos) return false;
// 非鸿蒙端:调用 gal 原生保存
if (!isOhos) {
try {
await Gal.putImageBytes(imageBytes, album: '闲言');
return true;
} catch (e) {
Log.e('[Non-OHOS] gal保存图片失败: $e');
return false;
}
}
try {
Log.d('[OHOS] 使用兼容方式保存图片');
@@ -240,11 +256,26 @@ class OhosCompatibilityHelper {
/// OHOS返回false需要通过分享降级
static bool get supportsDirectGallerySave => !isOhos;
/// OHOS平台兼容的视频保存方法
/// gal插件不支持OHOS使用系统分享作为替代方案
/// 平台兼容的视频保存方法
///
/// - 鸿蒙端gal插件不支持使用系统分享作为替代方案
/// - 非鸿蒙端iOS/Android/macOS调用 gal 原生保存到相册
/// - Web端返回 false不支持
///
/// 调用方无需预判断平台,方法内部统一分发。
static Future<bool> saveVideoToGalleryCompat(String videoPath) async {
if (kIsWeb) return false;
if (!isOhos) return false;
// 非鸿蒙端:调用 gal 原生保存
if (!isOhos) {
try {
await Gal.putVideo(videoPath, album: '闲言');
return true;
} catch (e) {
Log.e('[Non-OHOS] gal保存视频失败: $e');
return false;
}
}
try {
Log.d('[OHOS] 使用兼容方式保存视频');