import { useState } from 'react'; import { Alert, Pressable, StyleSheet, Text, View } from 'react-native'; import { useRouter } from 'expo-router'; import { useTranslation } from 'react-i18next'; import * as Notifications from 'expo-notifications'; import { setPushPromptState } from '@/src/storage/appStorage'; export default function PushPromptScreen() { const router = useRouter(); const { t } = useTranslation(); const [loading, setLoading] = useState(false); async function goHome() { router.replace('/(app)/home'); } async function onLater() { await setPushPromptState('skipped'); await goHome(); } async function onEnableNow() { // 触发系统权限申请(可失败,但不阻塞进入主功能) setLoading(true); try { await Notifications.requestPermissionsAsync(); await setPushPromptState('enabled'); await goHome(); } catch (e) { Alert.alert(t('push.errorTitle'), t('push.errorDesc')); await goHome(); } finally { setLoading(false); } } return ( {t('push.cardTitle')} {t('push.cardDesc')} {t('push.later')} {loading ? t('push.loading') : t('push.enable')} ); } const styles = StyleSheet.create({ container: { flex: 1, padding: 20, justifyContent: 'center', gap: 16 }, card: { borderRadius: 18, padding: 20, backgroundColor: '#111827', gap: 10 }, title: { color: 'white', fontSize: 20, fontWeight: '700' }, desc: { color: '#E5E7EB', fontSize: 15, lineHeight: 21 }, actions: { flexDirection: 'row', gap: 12 }, btn: { flex: 1, paddingVertical: 14, borderRadius: 14, alignItems: 'center' }, primary: { backgroundColor: '#16A34A' }, secondary: { backgroundColor: '#F3F4F6' }, btnText: { fontSize: 16, fontWeight: '600', color: '#FFFFFF' }, secondaryText: { color: '#111827' } });