mirror of
https://gh-proxy.org/https://github.com/tiajinsha/JKVideo
synced 2026-07-08 07:28:37 +08:00
- settingsStore: 移除 coverQuality,新增 darkMode / trafficSaving 布尔字段(AsyncStorage 持久化) - utils/theme.ts: 新建 useTheme() hook,返回浅色/深色颜色表 - settings.tsx: 新增外观(浅色/深色)和流量(标准/节流)选项,移除封面图清晰度 - BigVideoCard: 节流模式跳过预加载、禁止自动播放;封面低画质;支持暗黑配色 - useVideoDetail: 节流模式下默认 qn=16(360p) - VideoCard / LiveCard: 移除 coverQuality 依赖,改用 trafficSaving;支持暗黑配色 - index.tsx: 导航栏/搜索栏/列表背景跟随主题 - search.tsx: 页面背景/输入框/文字跟随主题 - downloads.tsx: 顶栏/背景/文字跟随主题 - _layout.tsx: StatusBar 随暗黑模式切换 light/dark
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { Stack } from 'expo-router';
|
||
import { StatusBar } from 'expo-status-bar';
|
||
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
||
import { Text, View } from 'react-native';
|
||
import { useEffect } from 'react';
|
||
import { useAuthStore } from '../store/authStore';
|
||
import { useDownloadStore } from '../store/downloadStore';
|
||
import { useSettingsStore } from '../store/settingsStore';
|
||
import { useTheme } from '../utils/theme';
|
||
import { MiniPlayer } from '../components/MiniPlayer';
|
||
import * as Sentry from '@sentry/react-native';
|
||
import { ErrorBoundary } from '@sentry/react-native';
|
||
|
||
Sentry.init({
|
||
dsn: process.env.EXPO_PUBLIC_SENTRY_DSN ?? '',
|
||
enabled: !__DEV__,
|
||
tracesSampleRate: 0.05,
|
||
environment: process.env.EXPO_PUBLIC_APP_ENV ?? 'production',
|
||
});
|
||
|
||
function RootLayout() {
|
||
const restore = useAuthStore(s => s.restore);
|
||
const loadDownloads = useDownloadStore(s => s.loadFromStorage);
|
||
const restoreSettings = useSettingsStore(s => s.restore);
|
||
const darkMode = useSettingsStore(s => s.darkMode);
|
||
|
||
useEffect(() => {
|
||
restore();
|
||
loadDownloads();
|
||
restoreSettings();
|
||
|
||
}, []);
|
||
|
||
return (
|
||
<SafeAreaProvider>
|
||
<StatusBar style={darkMode ? 'light' : 'dark'} />
|
||
<View style={{ flex: 1 }}>
|
||
<ErrorBoundary fallback={<Text style={{ padding: 32, textAlign: 'center' }}>发生错误,请重启 App</Text>}>
|
||
<Stack screenOptions={{ headerShown: false }}>
|
||
<Stack.Screen name="index" />
|
||
<Stack.Screen
|
||
name="video"
|
||
options={{
|
||
animation: "slide_from_right",
|
||
gestureEnabled: true,
|
||
gestureDirection: "horizontal",
|
||
}}
|
||
/>
|
||
<Stack.Screen
|
||
name="live"
|
||
options={{
|
||
animation: "slide_from_right",
|
||
gestureEnabled: true,
|
||
gestureDirection: "horizontal",
|
||
}}
|
||
/>
|
||
<Stack.Screen
|
||
name="search"
|
||
options={{
|
||
animation: "slide_from_right",
|
||
gestureEnabled: true,
|
||
}}
|
||
/>
|
||
<Stack.Screen
|
||
name="downloads"
|
||
options={{
|
||
animation: "slide_from_right",
|
||
gestureEnabled: true,
|
||
gestureDirection: "horizontal",
|
||
}}
|
||
/>
|
||
<Stack.Screen
|
||
name="settings"
|
||
options={{
|
||
animation: "slide_from_right",
|
||
gestureEnabled: true,
|
||
gestureDirection: "horizontal",
|
||
}}
|
||
/>
|
||
</Stack>
|
||
</ErrorBoundary>
|
||
<MiniPlayer />
|
||
</View>
|
||
</SafeAreaProvider>
|
||
);
|
||
}
|
||
|
||
export default Sentry.wrap(RootLayout);
|