fix: 修复 Android 闪退问题 - SecureStore 异步调用
问题: - NativeStorage 使用了同步方法调用 expo-secure-store - expo-secure-store 的正确 API 是异步的(getItemAsync/setItemAsync/deleteItemAsync) - 在 Android 上同步调用不存在的方法导致应用崩溃 修复: - 将 Storage 接口改为异步方法 - 使用 SecureStore.getItemAsync/setItemAsync/deleteItemAsync - removeItem 使用 deleteItemAsync 而不是设置空字符串 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -87,6 +87,7 @@ export default function TemplateDetailScreen() {
|
||||
const [menuVisible, setMenuVisible] = useState(false);
|
||||
const [loadingLooks, setLoadingLooks] = useState(true);
|
||||
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
||||
const [retryTrigger, setRetryTrigger] = useState(0);
|
||||
const abortControllerRef = useRef<AbortController | null>(null);
|
||||
const imageCache = useRef(new Set<string>());
|
||||
|
||||
@@ -242,22 +243,15 @@ export default function TemplateDetailScreen() {
|
||||
cache.delete(`tag:${current?.title}`);
|
||||
setErrorMessage(null);
|
||||
setLoadingLooks(true);
|
||||
|
||||
const event = new Event('retry');
|
||||
window.dispatchEvent(event);
|
||||
setRetryTrigger(prev => prev + 1);
|
||||
}, [id, current?.title]);
|
||||
|
||||
useEffect(() => {
|
||||
const handleRetryEvent = () => {
|
||||
if (retryTrigger > 0) {
|
||||
const newController = new AbortController();
|
||||
abortControllerRef.current = newController;
|
||||
};
|
||||
|
||||
window.addEventListener('retry', handleRetryEvent);
|
||||
return () => {
|
||||
window.removeEventListener('retry', handleRetryEvent);
|
||||
};
|
||||
}, []);
|
||||
}
|
||||
}, [retryTrigger]);
|
||||
|
||||
const handleGenerate = () => {
|
||||
if (!resolvedTemplateId) {
|
||||
|
||||
Reference in New Issue
Block a user