Providers 组件
概述
index.tsx 是应用的根 Provider 组件,整合多个上下文 Provider,为整个应用提供主题、认证、国际化等功能。
文件路径
src/components/providers/index.tsx
功能特性
- SessionProvider: NextAuth 会话管理
- NextIntlClientProvider: 国际化支持
- ThemeProvider: 主题管理(next-themes)
- ThemeStyles: 主题样式注入
- BrandingProvider: 品牌配置
- Toaster: 全局 Toast 通知
接口定义
interface ThemeConfig {
radius: "none" | "sm" | "md" | "lg"; // 圆角大小
variant: "flat" | "default" | "brutal"; // UI 变体
density: "compact" | "default" | "comfortable"; // 密度
colors: {
primary: string; // 主色调
};
}
interface BrandingConfig {
name: string; // 应用名称
logo: string; // Logo 路径
description: string; // 应用描述
useCloneBranding?: boolean; // 是否使用克隆品牌
}
interface ProvidersProps {
children: React.ReactNode;
locale: string; // 当前语言
messages: AbstractIntlMessages; // 翻译消息
theme: ThemeConfig; // 主题配置
branding: BrandingConfig; // 品牌配置
}
使用示例
import { Providers } from "@/components/providers";
export default function RootLayout({
children,
params: { locale }
}: {
children: React.ReactNode;
params: { locale: string }
}) {
const messages = useMessages();
const themeConfig = {
radius: "md",
variant: "default",
density: "default",
colors: { primary: "#3b82f6" }
};
const brandingConfig = {
name: "Prompts.chat",
logo: "/logo.svg",
description: "AI Prompt 社区平台"
};
return (
<Providers
locale={locale}
messages={messages}
theme={themeConfig}
branding={brandingConfig}
>
{children}
</Providers>
);
}
Provider 层级
SessionProvider (NextAuth)
└── NextIntlClientProvider (i18n)
└── ThemeProvider (next-themes)
├── ThemeStyles
├── BrandingProvider
└── Toaster
└── {children}
配置说明
主题配置
| 属性 | 可选值 | 说明 |
|---|---|---|
| radius | none / sm / md / lg | 组件圆角大小 |
| variant | flat / default / brutal | UI 风格变体 |
| density | compact / default / comfortable | 组件密度 |
| colors.primary | 任意颜色值 | 主题主色 |
主题 Provider 配置
<ThemeProvider
attribute="class" // 使用 class 属性切换主题
defaultTheme="system" // 默认跟随系统
enableSystem // 启用系统主题检测
disableTransitionOnChange // 切换时禁用过渡动画
>
依赖
next-themes- 主题管理next-auth/react- 认证next-intl- 国际化@/components/ui/sonner- Toast 组件./theme-styles- 主题样式./branding-provider- 品牌 Provider
注意事项
- 该组件必须在
layout.tsx中使用,包裹所有子组件 - 主题配置通常来自
prompts.config.ts - 所有子组件都可以使用
useTheme()、useSession()、useTranslations()等 hooks - Toast 通知默认显示在右下角