import React, { useCallback, useEffect, useState } from 'react'; import { ActivityIndicator, FlatList, RefreshControl, StyleSheet, TouchableOpacity, View, Alert, } from 'react-native'; import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; import { navigationService } from '../../infrastructure/navigation/navigationService'; import { Avatar, Button, EmptyState, ResponsiveContainer, Text } from '../../components/common'; import { authService } from '../../services'; import { colors, spacing, borderRadius, shadows } from '../../theme'; import { User } from '../../types'; import { useResponsive } from '../../hooks'; export const BlockedUsersScreen: React.FC = () => { const { isMobile } = useResponsive(); const insets = useSafeAreaInsets(); const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const [processingUserId, setProcessingUserId] = useState(null); // 底部间距,避免被 TabBar 遮挡 const listBottomInset = isMobile ? 64 + 24 + insets.bottom + spacing.md : spacing.md; const loadBlockedUsers = useCallback(async () => { try { const response = await authService.getBlockedUsers(1, 100); setUsers(response.list || []); } catch (error) { console.error('加载黑名单失败:', error); } finally { setLoading(false); setRefreshing(false); } }, []); useEffect(() => { loadBlockedUsers(); }, [loadBlockedUsers]); const onRefresh = useCallback(() => { setRefreshing(true); loadBlockedUsers(); }, [loadBlockedUsers]); const handleUnblock = useCallback((user: User) => { Alert.alert( '取消拉黑', `确定取消拉黑 ${user.nickname} 吗?`, [ { text: '取消', style: 'cancel' }, { text: '确定', onPress: async () => { try { setProcessingUserId(user.id); const ok = await authService.unblockUser(user.id); if (!ok) { Alert.alert('失败', '取消拉黑失败,请稍后重试'); return; } setUsers(prev => prev.filter(u => u.id !== user.id)); } finally { setProcessingUserId(null); } }, }, ] ); }, []); const renderItem = ({ item }: { item: User }) => ( navigationService.navigate('UserProfile', { userId: item.id })} > {item.nickname} @{item.username}