feat: 修改macos兼容
This commit is contained in:
@@ -16,7 +16,7 @@ class KRSecureStorage {
|
||||
|
||||
// 存储箱名称
|
||||
static const String _boxName = 'kaer_secure_storage';
|
||||
|
||||
|
||||
// 加密密钥
|
||||
static const String _encryptionKey = 'kaer_secure_storage_key';
|
||||
|
||||
@@ -27,19 +27,19 @@ class KRSecureStorage {
|
||||
if (Platform.isMacOS || Platform.isWindows || Platform.isLinux) {
|
||||
final baseDir = await getApplicationSupportDirectory();
|
||||
KRLogUtil.kr_i('初始化 Hive,路径: ${baseDir.path}', tag: 'SecureStorage');
|
||||
|
||||
|
||||
// 确保目录存在
|
||||
if (!baseDir.existsSync()) {
|
||||
await baseDir.create(recursive: true);
|
||||
KRLogUtil.kr_i('已创建 Hive 目录: ${baseDir.path}', tag: 'SecureStorage');
|
||||
}
|
||||
|
||||
|
||||
await Hive.initFlutter(baseDir.path);
|
||||
} else {
|
||||
// Android 和 iOS 使用默认路径
|
||||
await Hive.initFlutter();
|
||||
}
|
||||
|
||||
|
||||
// 使用加密适配器
|
||||
final key = HiveAesCipher(_generateKey());
|
||||
await Hive.openBox(_boxName, encryptionCipher: key);
|
||||
@@ -48,14 +48,14 @@ class KRSecureStorage {
|
||||
KRLogUtil.kr_e('初始化 Hive 失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('错误类型: ${e.runtimeType}', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('错误堆栈: $stackTrace', tag: 'SecureStorage');
|
||||
|
||||
|
||||
// 对于 Windows 和 Linux,如果初始化失败,尝试删除旧文件并重试
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
try {
|
||||
KRLogUtil.kr_i('尝试清理并重新初始化 Hive', tag: 'SecureStorage');
|
||||
final baseDir = await getApplicationSupportDirectory();
|
||||
final hiveDir = Directory(baseDir.path);
|
||||
|
||||
|
||||
// 查找并删除相关的 Hive 文件
|
||||
if (hiveDir.existsSync()) {
|
||||
final files = hiveDir.listSync();
|
||||
@@ -63,8 +63,8 @@ class KRSecureStorage {
|
||||
if (entity is File) {
|
||||
final fileName = entity.path.split(Platform.pathSeparator).last;
|
||||
// 删除 Hive 数据库文件(通常是 .hive 或 .lock 文件)
|
||||
if (fileName.startsWith(_boxName) ||
|
||||
fileName.endsWith('.hive') ||
|
||||
if (fileName.startsWith(_boxName) ||
|
||||
fileName.endsWith('.hive') ||
|
||||
fileName.endsWith('.lock')) {
|
||||
try {
|
||||
await entity.delete();
|
||||
@@ -76,7 +76,7 @@ class KRSecureStorage {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 重新初始化
|
||||
await Hive.initFlutter(baseDir.path);
|
||||
final key = HiveAesCipher(_generateKey());
|
||||
@@ -116,8 +116,15 @@ class KRSecureStorage {
|
||||
try {
|
||||
final box = await _ensureBoxOpen();
|
||||
await box.put(key, value);
|
||||
|
||||
// 🔧 关键修复:强制将数据立即写入磁盘,确保持久化
|
||||
// 不调用 flush() 时,数据只在内存缓冲区中,应用关闭后会丢失!
|
||||
await box.flush();
|
||||
|
||||
print('💾 [SecureStorage] 数据已保存并刷新到磁盘: $key');
|
||||
KRLogUtil.kr_i('✅ 数据已保存: $key', tag: 'SecureStorage');
|
||||
} catch (e) {
|
||||
print('❌ [SecureStorage] 存储数据失败: $e');
|
||||
KRLogUtil.kr_e('❌ 存储数据失败: $e', tag: 'SecureStorage');
|
||||
rethrow; // 重新抛出异常,让调用者知道保存失败
|
||||
}
|
||||
@@ -210,4 +217,4 @@ class KRSecureStorage {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ class KRWindowManager with WindowListener, TrayListener {
|
||||
// 阻止窗口关闭
|
||||
await windowManager.setPreventClose(true);
|
||||
} else {
|
||||
await windowManager.setTitle('Kaer VPN');
|
||||
await windowManager.setTitle('HiFastVPN');
|
||||
await windowManager.setSize(const Size(800, 668));
|
||||
await windowManager.setMinimumSize(const Size(400, 334));
|
||||
await windowManager.center();
|
||||
@@ -94,7 +94,7 @@ class KRWindowManager with WindowListener, TrayListener {
|
||||
/// 初始化平台通道
|
||||
void _initPlatformChannel() {
|
||||
if (Platform.isMacOS) {
|
||||
const platform = MethodChannel('kaer_vpn/terminate');
|
||||
const platform = MethodChannel('hifast_vpn/terminate');
|
||||
platform.setMethodCallHandler((call) async {
|
||||
if (call.method == 'onTerminate') {
|
||||
KRLogUtil.kr_i('收到应用终止通知');
|
||||
|
||||
Reference in New Issue
Block a user