feat(challenges): 添加自定义挑战功能和多语言支持
- 新增自定义挑战创建页面,支持设置挑战类型、时间范围、目标值等 - 实现挑战邀请码系统,支持通过邀请码加入自定义挑战 - 完善挑战详情页面的多语言翻译支持 - 优化用户认证状态检查逻辑,使用token作为主要判断依据 - 添加阿里字体文件支持,提升UI显示效果 - 改进确认弹窗组件,支持Liquid Glass效果和自定义内容 - 优化应用启动流程,直接读取onboarding状态而非预加载用户数据
This commit is contained in:
@@ -82,14 +82,38 @@ async function handle401Unauthorized() {
|
||||
}
|
||||
}
|
||||
|
||||
// Token 缓存:内存中保存一份,避免每次都读取 AsyncStorage
|
||||
let inMemoryToken: string | null = null;
|
||||
|
||||
/**
|
||||
* 设置认证 token
|
||||
* 同时更新内存缓存和持久化存储
|
||||
*/
|
||||
export async function setAuthToken(token: string | null): Promise<void> {
|
||||
inMemoryToken = token;
|
||||
|
||||
// 同步更新 AsyncStorage
|
||||
if (token) {
|
||||
await AsyncStorage.setItem(STORAGE_KEYS.authToken, token);
|
||||
} else {
|
||||
await AsyncStorage.removeItem(STORAGE_KEYS.authToken);
|
||||
}
|
||||
}
|
||||
|
||||
export function getAuthToken(): Promise<string | null> {
|
||||
return AsyncStorage.getItem(STORAGE_KEYS.authToken);
|
||||
/**
|
||||
* 获取认证 token
|
||||
* 优先使用内存缓存,若无则从 AsyncStorage 读取并缓存
|
||||
*/
|
||||
export async function getAuthToken(): Promise<string | null> {
|
||||
// 如果内存中有,直接返回
|
||||
if (inMemoryToken !== null) {
|
||||
return inMemoryToken;
|
||||
}
|
||||
|
||||
// 否则从 AsyncStorage 读取并缓存到内存
|
||||
const token = await AsyncStorage.getItem(STORAGE_KEYS.authToken);
|
||||
inMemoryToken = token;
|
||||
return token;
|
||||
}
|
||||
|
||||
export type ApiRequestOptions = {
|
||||
|
||||
Reference in New Issue
Block a user