add ios app
This commit is contained in:
179
app-ios/app/(tabs)/profile.tsx
Normal file
179
app-ios/app/(tabs)/profile.tsx
Normal file
@@ -0,0 +1,179 @@
|
||||
import { SectionCard } from '@/components/profile/SectionCard';
|
||||
import { SettingItem } from '@/components/profile/SettingItem';
|
||||
import { AppColors } from '@/constants/theme';
|
||||
import { mockUserProfile, settingsSections } from '@/data/mockData';
|
||||
import { Ionicons } from '@expo/vector-icons';
|
||||
import React, { useState } from 'react';
|
||||
import { Alert, ScrollView, StyleSheet, Text, View } from 'react-native';
|
||||
import { SafeAreaView } from 'react-native-safe-area-context';
|
||||
|
||||
export default function ProfileScreen() {
|
||||
const [settings, setSettings] = useState({
|
||||
largeFont: false,
|
||||
darkMode: false,
|
||||
reminder: true,
|
||||
});
|
||||
|
||||
const handleToggle = (key: keyof typeof settings) => (value: boolean) => {
|
||||
setSettings(prev => ({ ...prev, [key]: value }));
|
||||
};
|
||||
|
||||
const showToast = (message: string) => {
|
||||
Alert.alert('提示', message);
|
||||
};
|
||||
|
||||
return (
|
||||
<SafeAreaView style={styles.container} edges={['top']}>
|
||||
<ScrollView
|
||||
style={styles.content}
|
||||
showsVerticalScrollIndicator={false}
|
||||
contentContainerStyle={styles.contentContainer}
|
||||
>
|
||||
{/* Profile Header */}
|
||||
<View style={styles.profileHeader}>
|
||||
<View style={styles.avatar}>
|
||||
<Ionicons
|
||||
name="person-outline"
|
||||
size={36}
|
||||
color={AppColors.deepPurple}
|
||||
/>
|
||||
</View>
|
||||
<Text style={styles.profileName}>{mockUserProfile.nickname}</Text>
|
||||
<View style={styles.planBadge}>
|
||||
<View style={styles.planDot} />
|
||||
<Text style={styles.planText}>{mockUserProfile.planLabel}</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
{/* Payment Section */}
|
||||
<SectionCard title={settingsSections.payment.title}>
|
||||
{settingsSections.payment.items.map((item, index) => (
|
||||
<SettingItem
|
||||
key={item.id}
|
||||
icon={item.icon}
|
||||
label={item.label}
|
||||
description={item.description}
|
||||
type={item.type}
|
||||
isLast={index === settingsSections.payment.items.length - 1}
|
||||
onPress={() => showToast('功能开发中...')}
|
||||
/>
|
||||
))}
|
||||
</SectionCard>
|
||||
|
||||
{/* Privacy Section */}
|
||||
{/* <SectionCard title={settingsSections.privacy.title}>
|
||||
{settingsSections.privacy.items.map((item, index) => (
|
||||
<SettingItem
|
||||
key={item.id}
|
||||
icon={item.icon}
|
||||
label={item.label}
|
||||
description={item.description}
|
||||
type={item.type}
|
||||
isLast={index === settingsSections.privacy.items.length - 1}
|
||||
onPress={() => showToast('数据导出中...')}
|
||||
/>
|
||||
))}
|
||||
</SectionCard> */}
|
||||
|
||||
{/* Settings Section */}
|
||||
{/* <SectionCard title={settingsSections.settings.title}>
|
||||
<SettingItem
|
||||
icon="time-outline"
|
||||
label="语速"
|
||||
description="标准"
|
||||
type="arrow"
|
||||
onPress={() => showToast('功能开发中...')}
|
||||
/>
|
||||
<SettingItem
|
||||
icon="text-outline"
|
||||
label="大字模式"
|
||||
type="toggle"
|
||||
value={settings.largeFont}
|
||||
onToggle={handleToggle('largeFont')}
|
||||
/>
|
||||
<SettingItem
|
||||
icon="moon-outline"
|
||||
label="夜间模式"
|
||||
type="toggle"
|
||||
value={settings.darkMode}
|
||||
onToggle={handleToggle('darkMode')}
|
||||
isLast
|
||||
/>
|
||||
</SectionCard> */}
|
||||
|
||||
{/* Help Section */}
|
||||
<SectionCard title={settingsSections.help.title}>
|
||||
{settingsSections.help.items.map((item, index) => (
|
||||
<SettingItem
|
||||
key={item.id}
|
||||
icon={item.icon}
|
||||
label={item.label}
|
||||
type={item.type}
|
||||
isLast={index === settingsSections.help.items.length - 1}
|
||||
onPress={() => showToast('功能开发中...')}
|
||||
/>
|
||||
))}
|
||||
</SectionCard>
|
||||
|
||||
{/* Version Info */}
|
||||
<Text style={styles.version}>版本 1.0.0</Text>
|
||||
</ScrollView>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: AppColors.cream,
|
||||
},
|
||||
content: {
|
||||
flex: 1,
|
||||
},
|
||||
contentContainer: {
|
||||
padding: 20,
|
||||
paddingTop: 28,
|
||||
paddingBottom: 40,
|
||||
},
|
||||
profileHeader: {
|
||||
alignItems: 'center',
|
||||
paddingVertical: 20,
|
||||
marginBottom: 4,
|
||||
},
|
||||
avatar: {
|
||||
width: 72,
|
||||
height: 72,
|
||||
borderRadius: 36,
|
||||
backgroundColor: AppColors.lavender,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
marginBottom: 12,
|
||||
},
|
||||
profileName: {
|
||||
fontSize: 18,
|
||||
fontWeight: '600',
|
||||
color: AppColors.deepPurple,
|
||||
marginBottom: 4,
|
||||
},
|
||||
planBadge: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
},
|
||||
planDot: {
|
||||
width: 6,
|
||||
height: 6,
|
||||
borderRadius: 3,
|
||||
backgroundColor: AppColors.mediumPurple,
|
||||
marginRight: 4,
|
||||
},
|
||||
planText: {
|
||||
fontSize: 13,
|
||||
color: AppColors.mediumPurple,
|
||||
},
|
||||
version: {
|
||||
textAlign: 'center',
|
||||
fontSize: 12,
|
||||
color: AppColors.slatePurple,
|
||||
marginTop: 20,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user