From ee84a801fb7c5381c5e2a73c5d6d1f205e10de6e Mon Sep 17 00:00:00 2001 From: richarjiang Date: Mon, 25 Aug 2025 09:37:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=BB=A5=E4=BD=BF=E7=94=A8=20SafeAreaView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 goals-list、task-list、explore、personal、challenge/day 和 challenge/index 组件中引入 SafeAreaView,确保内容在安全区域内显示 - 移除不必要的 SafeAreaView 导入,优化代码结构 - 更新相关样式,提升用户体验和界面一致性 --- app/(tabs)/explore.tsx | 4 ++-- app/(tabs)/personal.tsx | 4 ++-- app/challenge/day.tsx | 3 ++- app/challenge/index.tsx | 3 ++- app/goals-list.tsx | 3 ++- app/task-list.tsx | 3 ++- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/(tabs)/explore.tsx b/app/(tabs)/explore.tsx index bc1e10e..40743ee 100644 --- a/app/(tabs)/explore.tsx +++ b/app/(tabs)/explore.tsx @@ -14,8 +14,8 @@ import { useAuthGuard } from '@/hooks/useAuthGuard'; import { TrainingPlan } from '@/services/trainingPlanApi'; 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 { Animated, Image, PanResponder, Pressable, ScrollView, StyleSheet, useWindowDimensions, View } from 'react-native'; +import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; // 移除旧的“热门活动”滑动数据,改为固定的“热点功能”卡片 diff --git a/app/(tabs)/personal.tsx b/app/(tabs)/personal.tsx index 299819a..223b46b 100644 --- a/app/(tabs)/personal.tsx +++ b/app/(tabs)/personal.tsx @@ -11,8 +11,8 @@ import { Ionicons } from '@expo/vector-icons'; import { useBottomTabBarHeight } from '@react-navigation/bottom-tabs'; import { useFocusEffect } from '@react-navigation/native'; import React, { useEffect, useMemo, useState } from 'react'; -import { Alert, Image, Linking, SafeAreaView, ScrollView, StatusBar, StyleSheet, Switch, Text, TouchableOpacity, View } from 'react-native'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { Alert, Image, Linking, ScrollView, StatusBar, StyleSheet, Switch, Text, TouchableOpacity, View } from 'react-native'; +import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; const DEFAULT_AVATAR_URL = 'https://plates-1251306435.cos.ap-guangzhou.myqcloud.com/images/avatar/avatarGirl01.jpeg'; diff --git a/app/challenge/day.tsx b/app/challenge/day.tsx index ad1df71..954ea4c 100644 --- a/app/challenge/day.tsx +++ b/app/challenge/day.tsx @@ -5,7 +5,8 @@ import { completeDay, setCustom } from '@/store/challengeSlice'; import type { Exercise, ExerciseCustomConfig } from '@/utils/pilatesPlan'; import { useLocalSearchParams, useRouter } from 'expo-router'; import React, { useState } from 'react'; -import { FlatList, SafeAreaView, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { FlatList, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; export default function ChallengeDayScreen() { const { day } = useLocalSearchParams<{ day: string }>(); diff --git a/app/challenge/index.tsx b/app/challenge/index.tsx index 5cf0a0c..6dd9820 100644 --- a/app/challenge/index.tsx +++ b/app/challenge/index.tsx @@ -7,7 +7,8 @@ import { estimateSessionMinutesWithCustom } from '@/utils/pilatesPlan'; import { Ionicons } from '@expo/vector-icons'; import { useRouter } from 'expo-router'; import React, { useEffect, useMemo } from 'react'; -import { Dimensions, FlatList, SafeAreaView, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { Dimensions, FlatList, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; export default function ChallengeHomeScreen() { const dispatch = useAppDispatch(); diff --git a/app/goals-list.tsx b/app/goals-list.tsx index 0d7ea5b..6155be7 100644 --- a/app/goals-list.tsx +++ b/app/goals-list.tsx @@ -10,7 +10,8 @@ import { useFocusEffect } from '@react-navigation/native'; import { LinearGradient } from 'expo-linear-gradient'; import { useRouter } from 'expo-router'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { Alert, FlatList, RefreshControl, SafeAreaView, StatusBar, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { Alert, FlatList, RefreshControl, StatusBar, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; export default function GoalsListScreen() { const theme = (useColorScheme() ?? 'light') as 'light' | 'dark'; diff --git a/app/task-list.tsx b/app/task-list.tsx index 74e6db9..7a8e9e7 100644 --- a/app/task-list.tsx +++ b/app/task-list.tsx @@ -12,7 +12,8 @@ import dayjs from 'dayjs'; import { LinearGradient } from 'expo-linear-gradient'; import { useRouter } from 'expo-router'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { Alert, FlatList, RefreshControl, SafeAreaView, StatusBar, StyleSheet, Text, View } from 'react-native'; +import { Alert, FlatList, RefreshControl, StatusBar, StyleSheet, Text, View } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; export default function GoalsDetailScreen() { const theme = (useColorScheme() ?? 'light') as 'light' | 'dark';