Make sure dark mode updates are propagated

This commit is contained in:
Lei Nelissen
2020-07-26 14:55:13 +02:00
parent 6978a4dfea
commit 9c24dede18

View File

@@ -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>