I have a expo app written with react-navigation ^3.12.0 I have a theme selection on my app, meaning you can click on color circle, and every screen on the app will have the background color whatever you chose, however the react-navigation doesn't change the header color, react-navigation only changes color accordingly if you navigate to different screen and go back to the screen where you can choose theme colors.
This is my code.
class AccountScreen extends Component {
static navigationOptions = ({navigation}) => {
const {params} = navigation.state;
return {
title: navigation.getParam("otherParam", "Account"),
headerTintColor: "white",
headerStyle: {
elevation: 0,
shadowOpacity: 0,
borderBottomWidth: 0,
backgroundColor: navigation.getParam("themeBackgroundColor"),
},
headerLeft: (
< TouchableOpacity
style = {
{
paddingLeft: 15
}
}
onPress = {()
=>
navigation.dispatch(DrawerActions.toggleDrawer())
}
>
<
Feather
name = "arrow-left"
size = {24}
color = "#ffffff" / >
< /TouchableOpacity>
),
headerRight: <
View
style = {
{
flexDirection: "row"
}
}><
/View>,
}
;
};
constructor(props) {
super(props);
this.state = {
loading: false,
};
}
componentDidMount() {
// https://github.com/facebook/react-native/issues/12981
YellowBox.ignoreWarnings(["Setting a timer"]);
const {theme, navigation} = this.props;
navigation.setParams({
themeBackgroundColor: theme.backgroundColor,
});
}
render() {
renderItem = ({item}) => (
< TouchableOpacity
onPress = {()
=>
this.props.setTheme(item.key)
}>
<
View
style = {
[
style.itemContainer,
{
backgroundColor: item.backgroundColor,
}
,
]
}
/>
< /TouchableOpacity>
)
;
return (
< FlatList
style = {
[
style.container,
{
backgroundColor: this.props.theme.backgroundColor
}
,
]
}
data = {this.props.themes}
numColumns = {3}
contentContainerStyle = {
{
flexGrow: 1,
justifyContent
:
"center",
left
:
"14%",
}
}
renderItem = {renderItem}
/>
)
;
}
}
Do I need to use redux? Please advise.
Edit: This is where i handle color selection
<TouchableOpacity onPress={() => this.props.setTheme(item.key)}>
<View
style={[
style.itemContainer,
{
backgroundColor: item.backgroundColor,
},
]}
/>
</TouchableOpacity>
navigation.setParams({ themeBackgroundColor: theme.backgroundColor, }); navigation.navigate('AccountScreen')... I haven't tested itbackgroundColor: navigation.getParam("themeBackgroundColor")?