修改 KRSecureStorage 类,确保每次操作前 box 都是打开状态。目前解决了从新打开app登录状态失效
(cherry picked from commit ab22be112a1753e5063799b5424f5d3feef06e2d)
This commit is contained in:
@@ -100,24 +100,38 @@ class KRSecureStorage {
|
||||
return hash.bytes;
|
||||
}
|
||||
|
||||
// 获取存储箱
|
||||
Box<dynamic> get _box => Hive.box(_boxName);
|
||||
// 🔧 修复:确保 box 始终打开
|
||||
Future<Box<dynamic>> _ensureBoxOpen() async {
|
||||
if (!Hive.isBoxOpen(_boxName)) {
|
||||
KRLogUtil.kr_w('⚠️ Box 未打开,重新打开: $_boxName', tag: 'SecureStorage');
|
||||
final key = HiveAesCipher(_generateKey());
|
||||
await Hive.openBox(_boxName, encryptionCipher: key);
|
||||
KRLogUtil.kr_i('✅ Box 已重新打开', tag: 'SecureStorage');
|
||||
}
|
||||
return Hive.box(_boxName);
|
||||
}
|
||||
|
||||
// 存储数据
|
||||
Future<void> kr_saveData({required String key, required String value}) async {
|
||||
try {
|
||||
await _box.put(key, value);
|
||||
final box = await _ensureBoxOpen();
|
||||
await box.put(key, value);
|
||||
KRLogUtil.kr_i('✅ 数据已保存: $key', tag: 'SecureStorage');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('存储数据失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 存储数据失败: $e', tag: 'SecureStorage');
|
||||
rethrow; // 重新抛出异常,让调用者知道保存失败
|
||||
}
|
||||
}
|
||||
|
||||
// 读取数据
|
||||
Future<String?> kr_readData({required String key}) async {
|
||||
try {
|
||||
return _box.get(key) as String?;
|
||||
final box = await _ensureBoxOpen();
|
||||
final value = box.get(key) as String?;
|
||||
KRLogUtil.kr_i('📖 读取数据: $key = ${value != null ? "存在" : "null"}', tag: 'SecureStorage');
|
||||
return value;
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('读取数据失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 读取数据失败: $e', tag: 'SecureStorage');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -125,27 +139,32 @@ class KRSecureStorage {
|
||||
// 删除数据
|
||||
Future<void> kr_deleteData({required String key}) async {
|
||||
try {
|
||||
await _box.delete(key);
|
||||
final box = await _ensureBoxOpen();
|
||||
await box.delete(key);
|
||||
KRLogUtil.kr_i('🗑️ 数据已删除: $key', tag: 'SecureStorage');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('删除数据失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 删除数据失败: $e', tag: 'SecureStorage');
|
||||
}
|
||||
}
|
||||
|
||||
// 清除所有数据
|
||||
Future<void> kr_clearAllData() async {
|
||||
try {
|
||||
await _box.clear();
|
||||
final box = await _ensureBoxOpen();
|
||||
await box.clear();
|
||||
KRLogUtil.kr_i('🧹 所有数据已清除', tag: 'SecureStorage');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('清除数据失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 清除数据失败: $e', tag: 'SecureStorage');
|
||||
}
|
||||
}
|
||||
|
||||
// 检查键是否存在
|
||||
Future<bool> kr_hasKey({required String key}) async {
|
||||
try {
|
||||
return _box.containsKey(key);
|
||||
final box = await _ensureBoxOpen();
|
||||
return box.containsKey(key);
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('检查键失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 检查键失败: $e', tag: 'SecureStorage');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -153,18 +172,20 @@ class KRSecureStorage {
|
||||
// 保存布尔值
|
||||
Future<void> kr_saveBool({required String key, required bool value}) async {
|
||||
try {
|
||||
await _box.put(key, value);
|
||||
final box = await _ensureBoxOpen();
|
||||
await box.put(key, value);
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('存储布尔值失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 存储布尔值失败: $e', tag: 'SecureStorage');
|
||||
}
|
||||
}
|
||||
|
||||
// 获取布尔值
|
||||
Future<bool?> kr_getBool({required String key}) async {
|
||||
try {
|
||||
return _box.get(key) as bool?;
|
||||
final box = await _ensureBoxOpen();
|
||||
return box.get(key) as bool?;
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('读取布尔值失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 读取布尔值失败: $e', tag: 'SecureStorage');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -172,18 +193,20 @@ class KRSecureStorage {
|
||||
// 保存整数
|
||||
Future<void> kr_saveInt({required String key, required int value}) async {
|
||||
try {
|
||||
await _box.put(key, value);
|
||||
final box = await _ensureBoxOpen();
|
||||
await box.put(key, value);
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('存储整数失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 存储整数失败: $e', tag: 'SecureStorage');
|
||||
}
|
||||
}
|
||||
|
||||
// 获取整数
|
||||
Future<int?> kr_getInt({required String key}) async {
|
||||
try {
|
||||
return _box.get(key) as int?;
|
||||
final box = await _ensureBoxOpen();
|
||||
return box.get(key) as int?;
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('读取整数失败: $e', tag: 'SecureStorage');
|
||||
KRLogUtil.kr_e('❌ 读取整数失败: $e', tag: 'SecureStorage');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user