refactor(navigation): replace direct navigation with navigation service
Some checks failed
Frontend CI / ota-android (push) Has been cancelled
Frontend CI / build-android-apk (push) Has been cancelled
Frontend CI / build-and-push-web (push) Has been cancelled

Replace direct `navigation.navigate()` and `navigation.getParent()?.navigate()` calls with centralized `navigationService.navigate()` across multiple screens. Convert screen component functions from JSX elements to array-returning functions in RootNavigator to fix React key warnings and improve render consistency.

- HomeScreen: use navigationService for post and user navigation
- PrivateChatInfoScreen: use navigationService for profile navigation
- ChatScreen: use navigationService for avatar press and user profile navigation
- RootNavigator: convert PublicScreens and AuthenticatedScreens to getPublicScreens() and getAuthenticatedScreens() functions returning arrays with proper keys
This commit is contained in:
lafay
2026-03-18 14:52:58 +08:00
parent a8f7e907b6
commit 2321c2dc06
4 changed files with 181 additions and 170 deletions

View File

@@ -31,6 +31,7 @@ import { userManager } from '../../stores/userManager';
import { Avatar, Text, Button, Loading, Divider } from '../../components/common';
import { User } from '../../types';
import { RootStackParamList, MessageStackParamList } from '../../navigation/types';
import { navigationService } from '../../infrastructure/navigation/navigationService';
type NavigationProp = NativeStackNavigationProp<MessageStackParamList>;
type PrivateChatInfoRouteProp = RouteProp<MessageStackParamList, 'PrivateChatInfo'>;
@@ -149,9 +150,8 @@ const PrivateChatInfoScreen: React.FC = () => {
// 查看用户资料
const handleViewProfile = () => {
// 使用导航跳转到用户资料页面
const rootNavigation = navigation.getParent();
rootNavigation?.navigate('UserProfile' as any, { userId });
// 使用导航服务跳转到用户资料页面
navigationService.navigate('UserProfile', { userId });
};
// 举报/投诉

View File

@@ -31,6 +31,7 @@ import { groupService } from '../../../../services/groupService';
import { userManager } from '../../../../stores/userManager';
import { groupManager } from '../../../../stores/groupManager';
import { RootStackParamList } from '../../../../navigation/types';
import { navigationService } from '../../../../infrastructure/navigation/navigationService';
import {
GroupMessage,
PanelType,
@@ -1039,9 +1040,9 @@ export const useChatScreen = () => {
// 点击头像跳转到用户主页
const handleAvatarPress = useCallback((userId: string) => {
if (userId && userId !== currentUserId) {
navigation.navigate('UserProfile' as any, { userId: String(userId) });
navigationService.navigate('UserProfile', { userId: String(userId) });
}
}, [navigation, currentUserId]);
}, [currentUserId]);
// 长按头像@用户
const handleAvatarLongPress = useCallback((senderId: string, nickname: string) => {
@@ -1113,8 +1114,7 @@ export const useChatScreen = () => {
conversationId: conversationId || undefined,
});
} else if (otherUser?.id) {
const rootNavigation = navigation.getParent();
rootNavigation?.navigate('UserProfile' as any, { userId: String(otherUser.id) });
navigationService.navigate('UserProfile', { userId: String(otherUser.id) });
}
}, [navigation, isGroupChat, routeGroupId, otherUser]);