feat: 添加引导流程和个人信息收集功能

- 在应用中集成引导流程,用户首次启动时显示欢迎页面和个人信息收集页面
- 使用 AsyncStorage 存储用户的引导状态和个人信息
- 在个人页面中添加重置引导流程的功能
- 更新依赖项,添加 @react-native-async-storage/async-storage 库以支持数据存储
- 修改布局以支持新页面的导航和显示
This commit is contained in:
richarjiang
2025-08-12 14:12:59 +08:00
parent 70fea4defd
commit ddcc1320a4
10 changed files with 859 additions and 4 deletions

View File

@@ -2,9 +2,11 @@ import { Colors } from '@/constants/Colors';
import { getTabBarBottomPadding } from '@/constants/TabBar';
import { useColorScheme } from '@/hooks/useColorScheme';
import { Ionicons } from '@expo/vector-icons';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useBottomTabBarHeight } from '@react-navigation/bottom-tabs';
import React, { useMemo, useState } from 'react';
import {
Alert,
SafeAreaView,
ScrollView,
StatusBar,
@@ -27,6 +29,32 @@ export default function PersonalScreen() {
const colorScheme = useColorScheme();
const colors = Colors[colorScheme ?? 'light'];
const handleResetOnboarding = () => {
Alert.alert(
'重置引导',
'确定要重置引导流程吗?下次启动应用时将重新显示引导页面。',
[
{
text: '取消',
style: 'cancel',
},
{
text: '确定',
style: 'destructive',
onPress: async () => {
try {
await AsyncStorage.multiRemove(['@onboarding_completed', '@user_personal_info']);
Alert.alert('成功', '引导状态已重置,请重启应用查看效果。');
} catch (error) {
console.error('重置引导状态失败:', error);
Alert.alert('错误', '重置失败,请稍后重试。');
}
},
},
]
);
};
const UserInfoSection = () => (
<View style={styles.userInfoCard}>
@@ -79,10 +107,14 @@ export default function PersonalScreen() {
<View style={styles.menuSection}>
<Text style={styles.sectionTitle}>{title}</Text>
{items.map((item, index) => (
<TouchableOpacity key={index} style={styles.menuItem}>
<TouchableOpacity
key={index}
style={styles.menuItem}
onPress={item.onPress}
>
<View style={styles.menuItemLeft}>
<View style={[styles.menuIcon]}>
<Ionicons name={item.icon} size={20} color={colors.primary} />
<Ionicons name={item.icon} size={20} color={item.iconColor || colors.primary} />
</View>
<Text style={styles.menuItemText}>{item.title}</Text>
</View>
@@ -197,6 +229,16 @@ export default function PersonalScreen() {
},
];
const developerItems = [
{
icon: 'refresh-outline',
iconBg: '#FFE8E8',
iconColor: '#FF4444',
title: '重置引导流程',
onPress: handleResetOnboarding,
},
];
return (
<View style={styles.container}>
<StatusBar barStyle="dark-content" backgroundColor="transparent" translucent />
@@ -211,6 +253,7 @@ export default function PersonalScreen() {
<MenuSection title="Account" items={accountItems} />
<MenuSection title="Notification" items={notificationItems} />
<MenuSection title="Other" items={otherItems} />
<MenuSection title="Developer" items={developerItems} />
{/* 底部浮动按钮 */}
<View style={[styles.floatingButtonContainer, { bottom: Math.max(30, tabBarHeight / 2) + (insets?.bottom ?? 0) }]}>