45
loading...
This website collects cookies to deliver better user experience
//context/themeContext.js
import React from 'react';
export const ThemeContext = React.createContext({
theme: 'dark',
setTheme: () => { }
})
//app.js or _app.js
import React, { useState } from 'react';
import { ThemeContext } from '../context/themeContext';
function MyApp({ Component, pageProps }) {
const [theme, setTheme] = useState("light")
const value = { theme, setTheme };
return (
<ThemeContext.Provider value={value} >
<Component {...pageProps} />
</ThemeContext.Provider>
);
}
The complete switch snippet can be obtained from Material UI switch documentation page.
import * as React from 'react';
import clsx from 'clsx';
import { styled } from '@mui/system';
import { useSwitch } from '@mui/core/SwitchUnstyled';
import { Tooltip } from '@mui/material';
import { ThemeContext } from '../context/themeContext';
...
function MUISwitch(props) {
const { theme, setTheme } = React.useContext(ThemeContext)
const { getInputProps, checked, disabled, focusVisible } = useSwitch(props);
const stateClasses = {
checked,
disabled,
focusVisible,
};
var mode = {
};
React.useEffect(() => {
const mode = stateClasses.checked ? 'dark' : 'light'
setTheme(mode)
}, [stateClasses])
return (
<Tooltip title="Theme switcher">
<SwitchRoot className={clsx(stateClasses)} >
<SwitchTrack>
<SwitchThumb className={clsx(stateClasses)} />
</SwitchTrack>
<SwitchInput {...getInputProps()} aria-label="Demo switch" />
</SwitchRoot>
</Tooltip>
);
}
export default function UseSwitchesCustom() {
return <MUISwitch defaultChecked />;
}
import React from 'react'
import { createTheme, ThemeProvider, styled } from '@mui/material/styles';
import { ThemeContext } from '../context/themeContext';
export default function BaseTheme(props) {
const { theme, setTheme } = React.useContext(ThemeContext)
const theme1 = createTheme(
{
palette:
{ mode: theme }
}
);
console.log('Current Theme - ' + JSON.stringify(theme));
return (
<div>
<ThemeProvider theme={theme1} >
{props.children}
</ThemeProvider>
</div>
)
}