This commit is contained in:
oneao committed 2025-10-30 22:54:45 +08:00
1 parent 2aa2b513eb
commit 200f72eb86
7 files changed
+316 -87

No files matched your search

+3 -3
View File
@@ -6,7 +6,7 @@ import { Animated, Pressable, View } from 'react-native'
const tabItems = [
{ name: 'finance', icon: <CircleDollarSign strokeWidth={1.5} size={24} /> },
{ name: 'dating', icon: <Heart strokeWidth={1.5} size={24} /> },
{ name: 'app-center', icon: <Layers strokeWidth={1.5} size={24} /> },
{ name: 'app-center', icon: <Layers strokeWidth={2} size={28} /> },
{ name: 'chat', icon: <MessageSquare strokeWidth={1.5} size={24} /> },
{ name: 'profile', icon: <CircleUserRound strokeWidth={1.5} size={24} /> },
]
@@ -16,7 +16,7 @@ function CustomTabBar({ state, descriptors, navigation }: any) {
const scales = useRef(tabItems.map(() => new Animated.Value(1))).current
return (
<View className="flex-row justify-around bg-white border-t border-gray-200 py-2">
<View className="flex-row justify-around bg-white">
{state.routes.map((route: any, index: number) => {
const item = tabItems.find(i => i.name === route.name)
if (!item)
@@ -49,7 +49,7 @@ function CustomTabBar({ state, descriptors, navigation }: any) {
onPressOut={onPressOut}
className="flex-1 items-center justify-center"
>
<Animated.View style={{ transform: [{ scale: scales[index] }] }} className="items-center p-2">
<Animated.View style={{ transform: [{ scale: scales[index] }] }} className="items-center p-3">
{React.cloneElement(item.icon, { color })}
</Animated.View>
</Pressable>
+37 -12
View File
@@ -1,17 +1,42 @@
import { StyleSheet, Text, View } from 'react-native'
// App.tsx
import React, { useEffect } from 'react'
import { Button, Text, View } from 'react-native'
import { useUserStore } from '@/store/userStore'
export default function App() {
const { userInfo, token, setUserInfo, setToken, logout } = useUserStore()
// 模拟 App 启动后读取状态
useEffect(() => {
console.log('用户信息:', userInfo)
console.log('Token:', token)
}, [userInfo, token])
export default function Tab() {
return (
<View style={styles.container}>
<Text>Tab [Credit]</Text>
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>
User Info:
{userInfo ? userInfo.username : '未登录'}
</Text>
<Text>
Token:
{token || '无'}
</Text>
<Button
title="登录"
onPress={() => {
setUserInfo({ userId: '1', username: '张三' })
setToken('abc123')
}}
/>
<Button
title="退出登录"
onPress={() => {
logout()
}}
/>
</View>
)
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
})
+31
View File
@@ -0,0 +1,31 @@
// store/userStore.ts
import AsyncStorage from '@react-native-async-storage/async-storage'
import { create } from 'zustand'
import { createJSONStorage, persist } from 'zustand/middleware'
interface UserState {
userInfo: { userId: string, username: string } | null
token: string | null
setUserInfo: (userInfo: UserState['userInfo']) => void
setToken: (token: string) => void
logout: () => void
}
export const useUserStore = create<UserState>()(
persist(
(set, get) => ({
userInfo: null,
token: null,
setUserInfo: userInfo => set({ userInfo }),
setToken: token => set({ token }),
logout: () => {
console.log('当前 token:', get().token) // 使用 get 获取最新状态
set({ userInfo: null, token: null })
},
}),
{
name: 'user-storage', // 存储在 AsyncStorage 的 key
storage: createJSONStorage(() => AsyncStorage),
},
),
)