feat: 引入路由常量并更新相关页面导航

- 新增 ROUTES 常量文件,集中管理应用路由
- 更新多个页面的导航逻辑,使用 ROUTES 常量替代硬编码路径
- 修改教练页面和今日训练页面的路由,提升代码可维护性
- 优化标签页和登录页面的导航,确保一致性和易用性
This commit is contained in:
richarjiang
2025-08-18 10:05:22 +08:00
parent 93918366a9
commit 849447c5da
9 changed files with 289 additions and 253 deletions

View File

@@ -16,6 +16,7 @@ import { useRouter } from 'expo-router';
import React from 'react';
import { Animated, Image, PanResponder, Pressable, SafeAreaView, ScrollView, StyleSheet, useWindowDimensions, View } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { ROUTES, QUERY_PARAMS, ROUTE_PARAMS } from '@/constants/Routes';
// 移除旧的“热门活动”滑动数据,改为固定的“热点功能”卡片
@@ -76,7 +77,7 @@ export default function HomeScreen() {
Animated.spring(pan, { toValue: { x: snapX, y: clampedY }, useNativeDriver: false, bounciness: 6 }).start(() => {
if (!dragState.current.moved) {
// 切换到教练 tab并传递name参数
router.push('/coach?name=Iris' as any);
router.push(`${ROUTES.TAB_COACH}?${QUERY_PARAMS.COACH_NAME}=Iris` as any);
}
});
},
@@ -113,7 +114,7 @@ export default function HomeScreen() {
title: '今日训练',
subtitle: '完成一次普拉提训练,记录你的坚持',
level: '初学者',
onPress: () => pushIfAuthedElseLogin('/workout/today'),
onPress: () => pushIfAuthedElseLogin(ROUTES.WORKOUT_TODAY),
},
{
type: 'plan',
@@ -123,7 +124,7 @@ export default function HomeScreen() {
title: '体态评估',
subtitle: '评估你的体态,制定训练计划',
level: '初学者',
onPress: () => router.push('/ai-posture-assessment'),
onPress: () => router.push(ROUTES.AI_POSTURE_ASSESSMENT),
},
...listRecommendedArticles().map((a) => ({
type: 'article' as const,
@@ -185,7 +186,7 @@ export default function HomeScreen() {
image: 'https://plates-1251306435.cos.ap-guangzhou.myqcloud.com/images/imagedemo.jpeg',
title: c.title || '今日训练',
subtitle: c.subtitle || '完成一次普拉提训练,记录你的坚持',
onPress: () => pushIfAuthedElseLogin('/workout/today'),
onPress: () => pushIfAuthedElseLogin(ROUTES.WORKOUT_TODAY),
});
}
}
@@ -204,7 +205,7 @@ export default function HomeScreen() {
const handlePlanCardPress = () => {
if (activePlan) {
// 跳转到训练计划页面的锻炼tab并传递planId参数
router.push(`/training-plan?planId=${activePlan.id}&tab=schedule` as any);
router.push(`${ROUTES.TRAINING_PLAN}?${ROUTE_PARAMS.TRAINING_PLAN_ID}=${activePlan.id}&${ROUTE_PARAMS.TRAINING_PLAN_TAB}=${QUERY_PARAMS.TRAINING_PLAN_TAB_SCHEDULE}` as any);
}
};
@@ -275,7 +276,7 @@ export default function HomeScreen() {
<Pressable
style={[styles.featureCard, styles.featureCardQuinary]}
onPress={() => pushIfAuthedElseLogin('/workout/today')}
onPress={() => pushIfAuthedElseLogin(ROUTES.WORKOUT_TODAY)}
>
<View style={styles.featureIconWrapper}>
<View style={styles.featureIconPlaceholder}>
@@ -290,7 +291,7 @@ export default function HomeScreen() {
<Pressable
style={[styles.featureCard, styles.featureCardPrimary]}
onPress={() => pushIfAuthedElseLogin('/ai-posture-assessment')}
onPress={() => pushIfAuthedElseLogin(ROUTES.AI_POSTURE_ASSESSMENT)}
>
<View style={styles.featureIconWrapper}>
<Image
@@ -303,7 +304,7 @@ export default function HomeScreen() {
<Pressable
style={[styles.featureCard, styles.featureCardQuaternary]}
onPress={() => pushIfAuthedElseLogin('/training-plan')}
onPress={() => pushIfAuthedElseLogin(ROUTES.TRAINING_PLAN)}
>
<View style={styles.featureIconWrapper}>
<View style={styles.featureIconPlaceholder}>