light_dark.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import * as React from 'react';
  2. import IconButton from '@mui/material/IconButton';
  3. import { useTheme, ThemeProvider, createTheme } from '@mui/material/styles';
  4. import Brightness4Icon from '@mui/icons-material/Brightness4';
  5. import Brightness7Icon from '@mui/icons-material/Brightness7';
  6. import { CssBaseline } from '@mui/material';
  7. import useMediaQuery from '@mui/material/useMediaQuery';
  8. const ColorModeContext = React.createContext({ toggleColorMode: () => {} });
  9. function MyApp() {
  10. const theme = useTheme();
  11. const colorMode = React.useContext(ColorModeContext);
  12. return (
  13. //Give value and area to the dark mode
  14. <CssBaseline
  15. sx={{
  16. display: 'flex',
  17. width: '100%',
  18. alignItems: 'center',
  19. justifyContent: 'center',
  20. bgcolor: 'background.default',
  21. color: 'text.primary',
  22. borderRadius: 1,
  23. p: 3,
  24. }}
  25. >
  26. {theme.palette.mode} mode
  27. <IconButton sx={{ ml: 1 }} onClick={colorMode.toggleColorMode} color="inherit">
  28. {theme.palette.mode === 'dark' ? <Brightness7Icon /> : <Brightness4Icon />}
  29. </IconButton>
  30. </CssBaseline >
  31. );
  32. }
  33. export default function ToggleColorMode() {
  34. const [mode, setMode] = React.useState('light');
  35. const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
  36. const sys = React.useMemo(
  37. () =>
  38. createTheme({
  39. palette: {
  40. mode: prefersDarkMode ? 'dark' : 'light',
  41. },
  42. }),
  43. [prefersDarkMode],
  44. );
  45. const colorMode = React.useMemo(
  46. () => ({
  47. toggleColorMode: () => {
  48. setMode((prevMode) => (prevMode === 'light' ? 'dark' : 'light'));
  49. },
  50. }),
  51. [],
  52. );
  53. const theme = React.useMemo(
  54. () =>
  55. createTheme({
  56. palette: {
  57. mode,
  58. },
  59. }),
  60. [mode],
  61. );
  62. return (
  63. <ColorModeContext.Provider value={colorMode}>
  64. <ThemeProvider theme={theme}>
  65. <MyApp/>
  66. </ThemeProvider>
  67. </ColorModeContext.Provider>
  68. );
  69. }