97 lines
2.5 KiB
TypeScript
97 lines
2.5 KiB
TypeScript
|
|
import { I18nextProvider } from "react-i18next";
|
|
import { Platform } from 'react-native';
|
|
import 'react-native-gesture-handler';
|
|
import { GestureHandlerRootView } from "react-native-gesture-handler";
|
|
import 'react-native-reanimated';
|
|
import Toast, { BaseToast, ErrorToast, ToastConfig } from 'react-native-toast-message';
|
|
import { Provider as ReduxProvider } from "react-redux";
|
|
import { AuthProvider } from "./contexts/auth-context";
|
|
import i18n from "./i18n";
|
|
import { LanguageProvider } from "./i18n/LanguageContext";
|
|
import { store } from "./store";
|
|
|
|
// 自定义 Toast 配置
|
|
const toastConfig: ToastConfig = {
|
|
/*
|
|
覆盖默认 success 类型
|
|
- 使用自定义组件 BaseToast
|
|
- 可以添加任何 props 到组件
|
|
*/
|
|
success: (props) => (
|
|
<BaseToast
|
|
{...props}
|
|
style={{ borderLeftColor: '#4CAF50' }}
|
|
contentContainerStyle={{ paddingHorizontal: 15 }}
|
|
text1Style={{
|
|
fontSize: 15,
|
|
fontWeight: '600'
|
|
}}
|
|
text2Style={{
|
|
fontSize: 13,
|
|
color: '#666'
|
|
}}
|
|
/>
|
|
),
|
|
/*
|
|
覆盖默认 error 类型
|
|
*/
|
|
error: (props) => (
|
|
<ErrorToast
|
|
{...props}
|
|
style={{ borderLeftColor: '#F44336' }}
|
|
contentContainerStyle={{ paddingHorizontal: 15 }}
|
|
text1Style={{
|
|
fontSize: 15,
|
|
fontWeight: '600'
|
|
}}
|
|
text2Style={{
|
|
fontSize: 13,
|
|
color: '#666'
|
|
}}
|
|
/>
|
|
),
|
|
/*
|
|
自定义 info 类型
|
|
*/
|
|
info: (props) => (
|
|
<BaseToast
|
|
{...props}
|
|
style={{ borderLeftColor: '#2196F3' }}
|
|
contentContainerStyle={{ paddingHorizontal: 15 }}
|
|
text1Style={{
|
|
fontSize: 15,
|
|
fontWeight: '600'
|
|
}}
|
|
text2Style={{
|
|
fontSize: 13,
|
|
color: '#666'
|
|
}}
|
|
/>
|
|
),
|
|
};
|
|
|
|
export function Provider({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<GestureHandlerRootView style={{ flex: 1 }}>
|
|
<I18nextProvider i18n={i18n}>
|
|
<LanguageProvider>
|
|
<ReduxProvider store={store}>
|
|
<AuthProvider>
|
|
{children}
|
|
<Toast
|
|
config={toastConfig}
|
|
position={Platform.OS === 'web' ? 'top' : 'bottom'}
|
|
topOffset={Platform.OS === 'web' ? 20 : undefined}
|
|
bottomOffset={Platform.OS === 'web' ? undefined : 40}
|
|
visibilityTime={3000}
|
|
autoHide
|
|
/>
|
|
</AuthProvider>
|
|
</ReduxProvider>
|
|
</LanguageProvider>
|
|
</I18nextProvider>
|
|
</GestureHandlerRootView>
|
|
);
|
|
}
|