import Handers from '@/assets/icons/svg/handers.svg'; import ForgetPwd from '@/components/login/forgetPwd'; import Login from '@/components/login/login'; import PhoneLogin from '@/components/login/phoneLogin'; import SignUp from '@/components/login/signUp'; import PrivacyModal from '@/components/owner/qualification/privacy'; import { ThemedText } from '@/components/ThemedText'; import { ThemedView } from '@/components/ThemedView'; import { useLocalSearchParams, useRouter } from 'expo-router'; import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Image, Keyboard, KeyboardAvoidingView, LayoutChangeEvent, Platform, ScrollView, StatusBar, TouchableOpacity, View, ViewStyle, useWindowDimensions } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; const LoginScreen = () => { const router = useRouter(); const { t } = useTranslation(); const { status } = useLocalSearchParams(); const [error, setError] = useState('123'); const [containerHeight, setContainerHeight] = useState(0); const { height: windowHeight } = useWindowDimensions(); // 展示首次输入密码 const [showPassword, setShowPassword] = useState(false); // 展示二次输入密码 const [showSecondPassword, setShowSecondPassword] = useState(false); const [keyboardOffset, setKeyboardOffset] = useState(0); const insets = useSafeAreaInsets(); // 判断是否有白边 const statusBarHeight = StatusBar?.currentHeight ?? 0; // 协议弹窗 const [modalVisible, setModalVisible] = useState(false); const [modalType, setModalType] = useState<'ai' | 'terms' | 'privacy' | 'user' | 'membership'>('privacy'); useEffect(() => { const keyboardWillShowListener = Keyboard.addListener( Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', (e) => { setKeyboardOffset(e.endCoordinates.height); } ); const keyboardWillHideListener = Keyboard.addListener( Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', () => { setKeyboardOffset(0); } ); return () => { keyboardWillShowListener.remove(); keyboardWillHideListener.remove(); }; }, []); const handleLayout = (event: LayoutChangeEvent) => { const { height } = event.nativeEvent.layout; setContainerHeight(height); }; const updateUrlParam = (key: string, value: string) => { setError(''); router.setParams({ [key]: value }); } return ( {t('login:auth.login.titleText')} 0 ? windowHeight - containerHeight - 210 + statusBarHeight - insets.top - 28 : 0, transform: [{ translateX: -200 }, { translateY: keyboardOffset > 0 ? -keyboardOffset + statusBarHeight : -keyboardOffset }] }} > { (showPassword || showSecondPassword) ? : } 0 ? windowHeight - containerHeight - 1 + statusBarHeight - insets.top - 30 : 0, transform: [{ translateX: -39.5 }, { translateY: keyboardOffset > 0 ? -4 - keyboardOffset + statusBarHeight : -4 - keyboardOffset }] }} > {/* 错误提示 */} {error} {(() => { const commonProps = { updateUrlParam, setError, }; const components = { signUp: ( ), forgetPwd: ( ), login: ( // ), code: ( ) }; return components[status as keyof typeof components] || components.login; })()} {status == 'login' || !status && {status === 'login' || !status ? t('auth.agree.logintext', { ns: 'login' }) : t('auth.agree.singupText', { ns: 'login' })} { setModalVisible(true); setModalType('terms') }}> {t('auth.agree.terms', { ns: 'login' })} {t('auth.agree.join', { ns: 'login' })} { setModalVisible(true); setModalType('privacy') }}> {t('auth.agree.privacyPolicy', { ns: 'login' })} } ); } export default LoginScreen