fix(ios): sync keyboard color scheme when theme changed (#9184)

This commit is contained in:
CatsJuice
2024-12-18 02:16:44 +00:00
parent f0d99f46dd
commit 2ceb6e924c
3 changed files with 25 additions and 2 deletions
+1
View File
@@ -24,6 +24,7 @@
"@capacitor/ios": "^6.2.0", "@capacitor/ios": "^6.2.0",
"@capacitor/keyboard": "^6.0.3", "@capacitor/keyboard": "^6.0.3",
"@sentry/react": "^8.44.0", "@sentry/react": "^8.44.0",
"next-themes": "^0.4.4",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-router-dom": "^6.28.0" "react-router-dom": "^6.28.0"
+23 -2
View File
@@ -27,7 +27,7 @@ import { I18n } from '@affine/i18n';
import { App as CapacitorApp } from '@capacitor/app'; import { App as CapacitorApp } from '@capacitor/app';
import { Browser } from '@capacitor/browser'; import { Browser } from '@capacitor/browser';
import { Haptics } from '@capacitor/haptics'; import { Haptics } from '@capacitor/haptics';
import { Keyboard } from '@capacitor/keyboard'; import { Keyboard, KeyboardStyle } from '@capacitor/keyboard';
import { import {
Framework, Framework,
FrameworkRoot, FrameworkRoot,
@@ -35,7 +35,8 @@ import {
GlobalContextService, GlobalContextService,
LifecycleService, LifecycleService,
} from '@toeverything/infra'; } from '@toeverything/infra';
import { Suspense } from 'react'; import { useTheme } from 'next-themes';
import { Suspense, useEffect } from 'react';
import { RouterProvider } from 'react-router-dom'; import { RouterProvider } from 'react-router-dom';
import { configureFetchProvider } from './fetch'; import { configureFetchProvider } from './fetch';
@@ -171,12 +172,32 @@ CapacitorApp.addListener('appUrlOpen', ({ url }) => {
console.error(e); 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() { export function App() {
return ( return (
<Suspense> <Suspense>
<FrameworkRoot framework={frameworkProvider}> <FrameworkRoot framework={frameworkProvider}>
<I18nProvider> <I18nProvider>
<AffineContext store={getCurrentStore()}> <AffineContext store={getCurrentStore()}>
<KeyboardThemeProvider />
<ModalConfigProvider> <ModalConfigProvider>
<RouterProvider <RouterProvider
fallbackElement={<AppFallback />} fallbackElement={<AppFallback />}
+1
View File
@@ -587,6 +587,7 @@ __metadata:
"@types/react": "npm:^19.0.1" "@types/react": "npm:^19.0.1"
"@types/react-dom": "npm:^19.0.2" "@types/react-dom": "npm:^19.0.2"
cross-env: "npm:^7.0.3" cross-env: "npm:^7.0.3"
next-themes: "npm:^0.4.4"
react: "npm:^19.0.0" react: "npm:^19.0.0"
react-dom: "npm:^19.0.0" react-dom: "npm:^19.0.0"
react-router-dom: "npm:^6.28.0" react-router-dom: "npm:^6.28.0"