Skip to content

Commit

Permalink
fix: theme color
Browse files Browse the repository at this point in the history
  • Loading branch information
hamster1963 committed Dec 3, 2024
1 parent 848cf32 commit a387773
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 3 deletions.
6 changes: 5 additions & 1 deletion app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// @auto-i18n-check. Please do not delete the line.
import { MotionProvider } from "@/components/motion/motion-provider";
import { ThemeColorManager } from "@/components/ThemeColorManager";
import getEnv from "@/lib/env-entry";
import { FilterProvider } from "@/lib/network-filter-context";
import { StatusProvider } from "@/lib/status-context";
Expand Down Expand Up @@ -81,7 +82,10 @@ export default async function LocaleLayout({
>
<NextIntlClientProvider messages={messages}>
<FilterProvider>
<StatusProvider>{children}</StatusProvider>
<StatusProvider>
<ThemeColorManager />
{children}
</StatusProvider>
</FilterProvider>
</NextIntlClientProvider>
</ThemeProvider>
Expand Down
38 changes: 38 additions & 0 deletions components/ThemeColorManager.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
'use client';

import { useEffect } from 'react';
import { useTheme } from 'next-themes';

export function ThemeColorManager() {
const { theme, systemTheme } = useTheme();

useEffect(() => {
const updateThemeColor = () => {
const currentTheme = theme === 'system' ? systemTheme : theme;
const meta = document.querySelector('meta[name="theme-color"]');

if (!meta) {
const newMeta = document.createElement('meta');
newMeta.name = 'theme-color';
document.head.appendChild(newMeta);
}

const themeColor = currentTheme === 'dark'
? 'hsl(30 15% 8%)' // 深色模式背景色
: 'hsl(0 0% 98%)'; // 浅色模式背景色

document.querySelector('meta[name="theme-color"]')?.setAttribute('content', themeColor);
};

// Update on mount and theme change
updateThemeColor();

// Listen for system theme changes
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
mediaQuery.addEventListener('change', updateThemeColor);

return () => mediaQuery.removeEventListener('change', updateThemeColor);
}, [theme, systemTheme]);

return null;
}
4 changes: 2 additions & 2 deletions public/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
"type": "image/png"
}
],
"theme_color": "#000000",
"background_color": "#000000",
"theme_color": "hsl(0 0% 98%)",
"background_color": "hsl(0 0% 98%)",
"start_url": "/",
"display": "standalone",
"orientation": "portrait"
Expand Down

0 comments on commit a387773

Please sign in to comment.