import { Tabs } from 'expo-router' import React, { useEffect } from 'react' import { StyleSheet, View, Text, Platform } from 'react-native' import { LinearGradient } from 'expo-linear-gradient' import { useTranslation } from 'react-i18next' import { useSafeAreaInsets } from 'react-native-safe-area-context' import { HomeIcon, MessageIcon, MyIcon, VideoIcon } from '@/components/icon' import { useMessageUnreadCount } from '@/hooks/use-message-unread-count' import { useAnnouncementUnreadCount } from '@/hooks/use-announcement-unread-count' const TAB_BAR_HEIGHT = 80 export default function TabLayout() { const { t } = useTranslation() const insets = useSafeAreaInsets() // Android 不需要额外的底部安全区域,iOS 和 Web 需要 const bottomInset = Platform.OS === 'android' ? 0 : insets.bottom // 获取未读消息数和公告数 const { data: messageData, refetch: refetchMessages } = useMessageUnreadCount() const { data: announcementData, refetch: refetchAnnouncements } = useAnnouncementUnreadCount() // 计算总未读数 const totalUnreadCount = (messageData?.total || 0) + (announcementData?.count || 0) // 组件挂载时获取未读数 useEffect(() => { refetchMessages() refetchAnnouncements() }, []) return ( ( ), }} > (focused ? null : {t('tabs.home')}), tabBarIcon: ({ focused }: { focused: boolean }) => { if (focused) { return ( ) } return ( ) }, }} /> (focused ? null : {t('tabs.video')}), tabBarIcon: ({ focused }: { focused: boolean }) => { if (focused) { return ( ) } return ( ) }, }} /> (focused ? null : {t('tabs.message')}), tabBarIcon: ({ focused }: { focused: boolean }) => { if (focused) { return ( {totalUnreadCount > 0 && ( )} ) } return ( {totalUnreadCount > 0 && ( )} ) }, }} /> (focused ? null : {t('tabs.my')}), tabBarIcon: ({ focused }: { focused: boolean }) => { if (focused) { return ( ) } return ( ) }, }} /> ) } const styles = StyleSheet.create({ iconContainer: { width: 87, height: 41, justifyContent: 'center', alignItems: 'center', borderRadius: 100, }, tabLabel: { fontSize: 10, color: '#FFFFFF', textAlign: 'center', }, unreadBadge: { position: 'absolute', top: 0, right: 0, width: 8, height: 8, borderRadius: 4, backgroundColor: '#00FF66', }, })