Make sure dark mode updates are propagated
This commit is contained in:
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
|
|||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import TrackPlayer from 'react-native-track-player';
|
import TrackPlayer from 'react-native-track-player';
|
||||||
import { PersistGate } from 'redux-persist/integration/react';
|
import { PersistGate } from 'redux-persist/integration/react';
|
||||||
import { AppearanceProvider, Appearance } from 'react-native-appearance';
|
import { AppearanceProvider, Appearance, AppearanceListener } from 'react-native-appearance';
|
||||||
import Routes from '../screens';
|
import Routes from '../screens';
|
||||||
import store, { persistedStore } from 'store';
|
import store, { persistedStore } from 'store';
|
||||||
import {
|
import {
|
||||||
@@ -10,16 +10,20 @@ import {
|
|||||||
DefaultTheme,
|
DefaultTheme,
|
||||||
DarkTheme,
|
DarkTheme,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
|
import { colors } from './Colors';
|
||||||
|
|
||||||
interface State {
|
interface State {
|
||||||
isReady: boolean;
|
isReady: boolean;
|
||||||
|
colorScheme?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class App extends Component<State> {
|
export default class App extends Component<{}, State> {
|
||||||
state = {
|
state: State = {
|
||||||
isReady: false
|
isReady: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
subscription = null;
|
||||||
|
|
||||||
async componentDidMount() {
|
async componentDidMount() {
|
||||||
await TrackPlayer.setupPlayer();
|
await TrackPlayer.setupPlayer();
|
||||||
await TrackPlayer.updateOptions({
|
await TrackPlayer.updateOptions({
|
||||||
@@ -32,22 +36,32 @@ export default class App extends Component<State> {
|
|||||||
TrackPlayer.CAPABILITY_SEEK_TO,
|
TrackPlayer.CAPABILITY_SEEK_TO,
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
this.setState({ isReady: true });
|
this.subscription = Appearance.addChangeListener(this.setScheme);
|
||||||
|
this.setState({ isReady: true, colorScheme: Appearance.getColorScheme() });
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
this.subscription?.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
setScheme: AppearanceListener = ({ colorScheme }) => {
|
||||||
|
this.setState({ colorScheme });
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { isReady } = this.state;
|
const { isReady, colorScheme } = this.state;
|
||||||
const scheme = Appearance.getColorScheme();
|
|
||||||
|
|
||||||
if (!isReady) {
|
if (!isReady) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(colorScheme);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<PersistGate loading={null} persistor={persistedStore}>
|
<PersistGate loading={null} persistor={persistedStore}>
|
||||||
<AppearanceProvider>
|
<AppearanceProvider>
|
||||||
<NavigationContainer theme={scheme === 'dark' ? DarkTheme : DefaultTheme}>
|
<NavigationContainer theme={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
|
||||||
<Routes />
|
<Routes />
|
||||||
</NavigationContainer>
|
</NavigationContainer>
|
||||||
</AppearanceProvider>
|
</AppearanceProvider>
|
||||||
|
|||||||
Reference in New Issue
Block a user