- 统一替换所有 @react-native-async-storage/async-storage 导入为自定义 kvStore - 新增 kvStore.ts 封装 expo-sqlite/kv-store,保持与 AsyncStorage 完全兼容 - 新增同步读写方法,提升性能 - 引入 expo-sqlite 依赖并更新 lock 文件 BREAKING CHANGE: 移除 @react-native-async-storage/async-storage 依赖,需重新安装依赖并清理旧数据
68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import AsyncStorage from '@/utils/kvStore';
|
|
|
|
// 引导状态存储键
|
|
const GUIDE_KEYS = {
|
|
GOALS_PAGE: '@guide_goals_page_completed',
|
|
} as const;
|
|
|
|
/**
|
|
* 检查用户是否已经完成特定引导
|
|
* @param guideKey 引导键名
|
|
* @returns Promise<boolean> 是否已完成
|
|
*/
|
|
export const checkGuideCompleted = async (guideKey: keyof typeof GUIDE_KEYS): Promise<boolean> => {
|
|
try {
|
|
const completed = await AsyncStorage.getItem(GUIDE_KEYS[guideKey]);
|
|
return completed === 'true';
|
|
} catch (error) {
|
|
console.error('检查引导状态失败:', error);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 标记引导为已完成
|
|
* @param guideKey 引导键名
|
|
*/
|
|
export const markGuideCompleted = async (guideKey: keyof typeof GUIDE_KEYS): Promise<void> => {
|
|
try {
|
|
await AsyncStorage.setItem(GUIDE_KEYS[guideKey], 'true');
|
|
} catch (error) {
|
|
console.error('保存引导状态失败:', error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 重置所有引导状态(用于测试或重置用户引导)
|
|
*/
|
|
export const resetAllGuides = async (): Promise<void> => {
|
|
try {
|
|
const keys = Object.values(GUIDE_KEYS);
|
|
await AsyncStorage.multiRemove(keys);
|
|
console.log('所有引导状态已重置');
|
|
} catch (error) {
|
|
console.error('重置引导状态失败:', error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 获取所有引导状态
|
|
* @returns Promise<Record<string, boolean>> 所有引导的完成状态
|
|
*/
|
|
export const getAllGuideStatus = async (): Promise<Record<string, boolean>> => {
|
|
try {
|
|
const result: Record<string, boolean> = {};
|
|
const keys = Object.values(GUIDE_KEYS);
|
|
|
|
for (const key of keys) {
|
|
const completed = await AsyncStorage.getItem(key);
|
|
result[key] = completed === 'true';
|
|
}
|
|
|
|
return result;
|
|
} catch (error) {
|
|
console.error('获取引导状态失败:', error);
|
|
return {};
|
|
}
|
|
};
|