Files
digital-pilates/utils/guideHelpers.ts
richarjiang 2357596665 refactor(storage): 迁移 AsyncStorage 至 expo-sqlite/kv-store
- 统一替换所有 @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 依赖,需重新安装依赖并清理旧数据
2025-09-15 12:51:18 +08:00

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 {};
}
};