react-phone-apps/apps/property-survey/app/_layout.tsx
lanrtop 1c6d491eaf feat: 全屏照片预览支持捏合缩放与拖动查看
- MarkerPhotoPanel:基于 RNGH PinchGesture + Reanimated 实现捏合缩放(1x~5x);放大后可双指拖动,放大模式下禁用左右切图手势
- _layout:根布局包裹 GestureHandlerRootView,解决 Modal 内手势失效问题
- 蓝图:新增 pdf-report 模块(concept),photo-capture 补充缩放任务卡(done)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 08:50:54 +09:00

69 lines
1.9 KiB
TypeScript

import { Tabs } from 'expo-router'
import { useEffect, useState } from 'react'
import { StatusBar } from 'expo-status-bar'
import { ActivityIndicator, View } from 'react-native'
import { GestureHandlerRootView } from 'react-native-gesture-handler'
import { SafeAreaProvider } from 'react-native-safe-area-context'
import { initDatabase } from '../src/db/database'
import { CategoriesProvider } from '../src/features/settings/CategoriesContext'
export default function RootLayout() {
const [dbReady, setDbReady] = useState(false)
useEffect(() => {
initDatabase()
.then(() => setDbReady(true))
.catch((err) => {
console.error('数据库初始化失败:', err)
setDbReady(true)
})
}, [])
if (!dbReady) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<ActivityIndicator size="large" />
</View>
)
}
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<SafeAreaProvider>
<StatusBar style="auto" />
<CategoriesProvider>
<Tabs
screenOptions={{
headerShown: true,
tabBarActiveTintColor: '#10B981',
}}
>
<Tabs.Screen
name="index"
options={{
title: '登记',
tabBarLabel: '登记',
headerShown: false,
}}
/>
<Tabs.Screen
name="summary"
options={{
title: '汇总',
tabBarLabel: '汇总',
}}
/>
<Tabs.Screen
name="settings"
options={{
title: '设置',
tabBarLabel: '设置',
}}
/>
</Tabs>
</CategoriesProvider>
</SafeAreaProvider>
</GestureHandlerRootView>
)
}