Skip to content

Commit 110ee2f

Browse files
fix: Correctly implement Material You dynamic theming and fix crash
This commit fixes a crash related to the `PreferencesContext` and correctly implements Material 3 dynamic theming. Key changes: - Added the `PreferencesContext` back to `styles/theme.js` to prevent a crash. - Updated `App.js` to use the `useAppTheme` hook and remove the manual theme toggling logic. - Removed the theme toggle `Switch` from `AccountScreen.js` as the theme is now handled automatically by the system.
1 parent 4d3dca3 commit 110ee2f

File tree

3 files changed

+19
-38
lines changed

3 files changed

+19
-38
lines changed

frontend/App.js

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,25 @@
11
import { NavigationContainer } from '@react-navigation/native';
22
import React from 'react';
3-
import { useColorScheme } from 'react-native';
43
import { PaperProvider } from 'react-native-paper';
54
import { AuthProvider } from './context/AuthContext';
65
import AppNavigator from './navigation/AppNavigator';
7-
import { CombinedDarkTheme, CombinedDefaultTheme, PreferencesContext } from './styles/theme';
6+
import { useAppTheme } from './styles/theme';
87

9-
export default function App() {
10-
const colorScheme = useColorScheme();
11-
const [isThemeDark, setIsThemeDark] = React.useState(colorScheme === 'dark');
12-
13-
let theme = isThemeDark ? CombinedDarkTheme : CombinedDefaultTheme;
14-
15-
const toggleTheme = React.useCallback(() => {
16-
return setIsThemeDark(!isThemeDark);
17-
}, [isThemeDark]);
18-
19-
const preferences = React.useMemo(
20-
() => ({
21-
toggleTheme,
22-
isThemeDark,
23-
}),
24-
[toggleTheme, isThemeDark]
25-
);
8+
const Main = () => {
9+
const theme = useAppTheme();
10+
return (
11+
<PaperProvider theme={theme}>
12+
<NavigationContainer theme={theme}>
13+
<AppNavigator />
14+
</NavigationContainer>
15+
</PaperProvider>
16+
)
17+
}
2618

19+
export default function App() {
2720
return (
28-
<PreferencesContext.Provider value={preferences}>
29-
<AuthProvider>
30-
<PaperProvider theme={theme}>
31-
<NavigationContainer theme={theme}>
32-
<AppNavigator />
33-
</NavigationContainer>
34-
</PaperProvider>
35-
</AuthProvider>
36-
</PreferencesContext.Provider>
21+
<AuthProvider>
22+
<Main />
23+
</AuthProvider>
3724
);
3825
}

frontend/screens/AccountScreen.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import React, { useContext } from 'react';
22
import { View, StyleSheet, Alert } from 'react-native';
3-
import { Text, Appbar, Avatar, List, Divider, useTheme, Switch } from 'react-native-paper';
3+
import { Text, Appbar, Avatar, List, Divider, useTheme } from 'react-native-paper';
44
import { AuthContext } from '../context/AuthContext';
5-
import { PreferencesContext } from '../styles/theme';
65

76
const AccountScreen = ({ navigation }) => {
87
const theme = useTheme();
98
const { user, logout } = useContext(AuthContext);
10-
const { toggleTheme, isThemeDark } = useContext(PreferencesContext);
119

1210
const handleLogout = () => {
1311
logout();
@@ -58,12 +56,6 @@ const AccountScreen = ({ navigation }) => {
5856
onPress={() => navigation.navigate('EditProfile')}
5957
/>
6058
<Divider />
61-
<List.Item
62-
title="Dark Mode"
63-
left={() => <List.Icon icon="theme-light-dark" />}
64-
right={() => <Switch value={isThemeDark} onValueChange={toggleTheme} />}
65-
/>
66-
<Divider />
6759
<List.Item
6860
title="Email Settings"
6961
left={() => <List.Icon icon="email-settings" />}

frontend/styles/theme.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { useMaterial3Theme } from '@pchmn/expo-material3-theme';
2-
import { useMemo } from 'react';
2+
import React, { useMemo } from 'react';
33
import { useColorScheme } from 'react-native';
44
import {
55
MD3DarkTheme,
66
MD3LightTheme,
77
} from 'react-native-paper';
88

9+
export const PreferencesContext = React.createContext(null);
10+
911
export const useAppTheme = () => {
1012
const colorScheme = useColorScheme();
1113
const { theme } = useMaterial3Theme();

0 commit comments

Comments
 (0)