diff --git a/packages/frontend/apps/ios/package.json b/packages/frontend/apps/ios/package.json index 5566e3f4316eb..65e1ed3b42ab3 100644 --- a/packages/frontend/apps/ios/package.json +++ b/packages/frontend/apps/ios/package.json @@ -24,6 +24,7 @@ "@capacitor/ios": "^6.2.0", "@capacitor/keyboard": "^6.0.3", "@sentry/react": "^8.44.0", + "next-themes": "^0.4.4", "react": "^19.0.0", "react-dom": "^19.0.0", "react-router-dom": "^6.28.0" diff --git a/packages/frontend/apps/ios/src/app.tsx b/packages/frontend/apps/ios/src/app.tsx index f0254f024be0c..620d1af131c51 100644 --- a/packages/frontend/apps/ios/src/app.tsx +++ b/packages/frontend/apps/ios/src/app.tsx @@ -27,7 +27,7 @@ import { I18n } from '@affine/i18n'; import { App as CapacitorApp } from '@capacitor/app'; import { Browser } from '@capacitor/browser'; import { Haptics } from '@capacitor/haptics'; -import { Keyboard } from '@capacitor/keyboard'; +import { Keyboard, KeyboardStyle } from '@capacitor/keyboard'; import { Framework, FrameworkRoot, @@ -35,7 +35,8 @@ import { GlobalContextService, LifecycleService, } from '@toeverything/infra'; -import { Suspense } from 'react'; +import { useTheme } from 'next-themes'; +import { Suspense, useEffect } from 'react'; import { RouterProvider } from 'react-router-dom'; import { configureFetchProvider } from './fetch'; @@ -171,12 +172,32 @@ CapacitorApp.addListener('appUrlOpen', ({ url }) => { console.error(e); }); +const KeyboardThemeProvider = () => { + const { resolvedTheme } = useTheme(); + + useEffect(() => { + Keyboard.setStyle({ + style: + resolvedTheme === 'dark' + ? KeyboardStyle.Dark + : resolvedTheme === 'light' + ? KeyboardStyle.Light + : KeyboardStyle.Default, + }).catch(e => { + console.error(`Failed to set keyboard style: ${e}`); + }); + }, [resolvedTheme]); + + return null; +}; + export function App() { return ( + } diff --git a/yarn.lock b/yarn.lock index 203285a231700..d92a93fea9d19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -587,6 +587,7 @@ __metadata: "@types/react": "npm:^19.0.1" "@types/react-dom": "npm:^19.0.2" cross-env: "npm:^7.0.3" + next-themes: "npm:^0.4.4" react: "npm:^19.0.0" react-dom: "npm:^19.0.0" react-router-dom: "npm:^6.28.0"