feat: 优化 AI 教练聊天界面和个人信息页面

- 在 AI 教练聊天界面中添加消息自动滚动功能,提升用户体验
- 更新消息发送逻辑,确保新消息渲染后再滚动
- 在个人信息页面中集成用户资料拉取功能,支持每次聚焦时更新用户信息
- 修改登录页面,增加身份令牌验证,确保安全性
- 更新样式以适应新功能的展示和交互
This commit is contained in:
richarjiang
2025-08-13 16:51:51 +08:00
parent 321947db98
commit ebc74eb1c8
6 changed files with 207 additions and 31 deletions

View File

@@ -1,8 +1,8 @@
import { Colors } from '@/constants/Colors';
import { getTabBarBottomPadding } from '@/constants/TabBar';
import { useAppSelector } from '@/hooks/redux';
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
import { useColorScheme } from '@/hooks/useColorScheme';
import { DEFAULT_MEMBER_NAME } from '@/store/userSlice';
import { DEFAULT_MEMBER_NAME, fetchMyProfile } from '@/store/userSlice';
import { Ionicons } from '@expo/vector-icons';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useBottomTabBarHeight } from '@react-navigation/bottom-tabs';
@@ -14,6 +14,7 @@ import { Alert, Image, SafeAreaView, ScrollView, StatusBar, StyleSheet, Switch,
import { useSafeAreaInsets } from 'react-native-safe-area-context';
export default function PersonalScreen() {
const dispatch = useAppDispatch();
const insets = useSafeAreaInsets();
const tabBarHeight = useBottomTabBarHeight();
const bottomPadding = useMemo(() => {
@@ -69,7 +70,12 @@ export default function PersonalScreen() {
};
useEffect(() => { load(); }, []);
useFocusEffect(React.useCallback(() => { load(); return () => { }; }, []));
useFocusEffect(React.useCallback(() => {
// 每次聚焦时从后端拉取最新用户资料
dispatch(fetchMyProfile());
load();
return () => { };
}, [dispatch]));
useEffect(() => {
if (userProfileFromRedux) {
setProfile(userProfileFromRedux);