omnAPP/lib/app/utils/kr_update_util.dart
2025-09-23 16:23:15 +08:00

148 lines
4.3 KiB
Dart
Executable File

import 'package:get/get.dart';
import 'dart:io' show Platform;
import 'package:url_launcher/url_launcher.dart';
import 'package:kaer_with_panels/app/widgets/dialogs/kr_update_dialog.dart';
import 'package:package_info_plus/package_info_plus.dart';
import '../localization/app_translations.dart';
import 'package:kaer_with_panels/app/utils/kr_log_util.dart';
import '../model/response/kr_config_data.dart';
/// 更新工具类
class KRUpdateUtil {
/// 单例模式
static final KRUpdateUtil _instance = KRUpdateUtil._internal();
factory KRUpdateUtil() => _instance;
KRUpdateUtil._internal();
/// 当前更新信息
KRUpdateApplication? _kr_currentUpdateInfo;
/// 初始化更新信息
/// [updateInfo] 更新信息对象
void kr_initUpdateInfo(KRUpdateApplication updateInfo) {
_kr_currentUpdateInfo = updateInfo;
}
/// 检查更新
Future<void> kr_checkUpdate() async {
if (_kr_currentUpdateInfo == null) {
return;
}
// 获取当前应用版本号
final PackageInfo packageInfo = await PackageInfo.fromPlatform();
final String currentVersion = packageInfo.version;
// 比较版本号
if (_kr_compareVersions(currentVersion, _kr_currentUpdateInfo!.kr_version) <
0) {
_kr_showUpdateDialog(_kr_currentUpdateInfo!);
}
}
/// 比较版本号
/// 返回值:
/// -1: 当前版本小于目标版本
/// 0: 当前版本等于目标版本
/// 1: 当前版本大于目标版本
int _kr_compareVersions(String currentVersion, String targetVersion) {
return currentVersion.compareTo(targetVersion);
}
/// 显示更新对话框
void _kr_showUpdateDialog(KRUpdateApplication updateInfo) {
// 获取更新内容
String? updateContent = updateInfo.kr_version_description;
// 如果更新内容为空,使用默认内容
if (updateContent?.isEmpty ?? true) {
updateContent = AppTranslations.kr_update.content;
}
KRUpdateDialog.show(
version: updateInfo.kr_version,
updateContent: updateContent,
onConfirm: () {
_kr_handleUpdate(updateInfo);
},
onCancel: () => Get.back(),
showCancelButton: true,
);
}
/// 处理更新
Future<void> _kr_handleUpdate(KRUpdateApplication updateInfo) async {
if (updateInfo.kr_url.isEmpty) {
Get.back();
return;
}
try {
final Uri uri = Uri.parse(updateInfo.kr_url);
if (Platform.isAndroid) {
// Android 平台处理
await _kr_handleAndroidUpdate(uri);
} else if (Platform.isIOS) {
// iOS 平台处理
await _kr_handleIOSUpdate(uri);
} else if (Platform.isMacOS) {
// macOS 平台处理
await _kr_handleMacOSUpdate(uri);
} else if (Platform.isWindows) {
// Windows 平台处理
await _kr_handleWindowsUpdate(uri);
} else if (Platform.isLinux) {
// Linux 平台处理
await _kr_handleLinuxUpdate(uri);
}
} catch (e) {
KRLogUtil.kr_e('更新处理错误: $e', tag: 'UpdateUtil');
} finally {
Get.back();
}
}
/// 处理 Android 平台更新
Future<void> _kr_handleAndroidUpdate(Uri uri) async {
// Android 平台通常是下载 APK 文件
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
/// 处理 iOS 平台更新
Future<void> _kr_handleIOSUpdate(Uri uri) async {
// iOS 平台通常是跳转到 App Store
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
/// 处理 macOS 平台更新
Future<void> _kr_handleMacOSUpdate(Uri uri) async {
// macOS 平台通常是下载 DMG 文件或跳转到 Mac App Store
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
/// 处理 Windows 平台更新
Future<void> _kr_handleWindowsUpdate(Uri uri) async {
// Windows 平台通常是下载 exe 安装文件
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
/// 处理 Linux 平台更新
Future<void> _kr_handleLinuxUpdate(Uri uri) async {
// Linux 平台通常是下载安装包文件
if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication);
}
}
}