feat: 更新多个组件以优化用户体验和功能

- 在 CoachScreen 中移除不必要的 router 引入,简化代码结构
- 在 PersonalScreen 中移除未使用的 colorScheme 引入,优化组件性能
- 更新 NutritionRadarCard 组件,新增卡路里计算功能,提升营养数据展示
- 修改 Statistics 组件,调整样式以增强视觉效果
- 移除 iOS 项目中的多余健康数据权限设置,简化配置
This commit is contained in:
richarjiang
2025-08-25 17:41:42 +08:00
parent be0a8e7393
commit 91b7b0cb99
5 changed files with 244 additions and 33 deletions

View File

@@ -1,10 +1,8 @@
import ActivityHeatMap from '@/components/ActivityHeatMap';
import { PRIVACY_POLICY_URL, USER_AGREEMENT_URL } from '@/constants/Agree';
import { Colors } from '@/constants/Colors';
import { getTabBarBottomPadding } from '@/constants/TabBar';
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
import { useAuthGuard } from '@/hooks/useAuthGuard';
import { useColorScheme } from '@/hooks/useColorScheme';
import { useNotifications } from '@/hooks/useNotifications';
import { DEFAULT_MEMBER_NAME, fetchActivityHistory, fetchMyProfile } from '@/store/userSlice';
import { Ionicons } from '@expo/vector-icons';
@@ -21,16 +19,14 @@ export default function PersonalScreen() {
const { confirmLogout, confirmDeleteAccount, isLoggedIn, pushIfAuthedElseLogin } = useAuthGuard();
const insets = useSafeAreaInsets();
const tabBarHeight = useBottomTabBarHeight();
const colorScheme = useColorScheme();
// 推送通知相关
const {
isInitialized,
permissionStatus,
requestPermission,
sendNotification,
} = useNotifications();
const [notificationEnabled, setNotificationEnabled] = useState(false);
// 计算底部间距
@@ -38,9 +34,6 @@ export default function PersonalScreen() {
return getTabBarBottomPadding(tabBarHeight) + (insets?.bottom ?? 0);
}, [tabBarHeight, insets?.bottom]);
// 颜色主题
const colors = Colors[colorScheme ?? 'light'];
// 直接使用 Redux 中的用户信息,避免重复状态管理
const userProfile = useAppSelector((state) => state.user.profile);
@@ -116,9 +109,9 @@ export default function PersonalScreen() {
<View style={styles.cardContainer}>
<View style={styles.userInfoContainer}>
<View style={styles.avatarContainer}>
<Image
source={{ uri: userProfile.avatar || DEFAULT_AVATAR_URL }}
style={styles.avatar}
<Image
source={{ uri: userProfile.avatar || DEFAULT_AVATAR_URL }}
style={styles.avatar}
/>
</View>
<View style={styles.userDetails}>
@@ -183,7 +176,7 @@ export default function PersonalScreen() {
{item.type === 'switch' ? (
<Switch
value={item.switchValue || false}
onValueChange={item.onSwitchChange || (() => {})}
onValueChange={item.onSwitchChange || (() => { })}
trackColor={{ false: '#E5E5E5', true: '#9370DB' }}
thumbColor="#FFFFFF"
style={styles.switch}