Muhammad Zaryab Rafique
04/04/2021, 5:07 PMMuhammad Zaryab Rafique
04/04/2021, 5:08 PMsetContent {
val prefViewModel: PrefViewModel = viewModel()
val mode: Boolean by prefViewModel.mode.observeAsState(false)
val preferences = getSharedPreferences("AppMode", MODE_PRIVATE)
val editor = preferences.edit()
editor.putBoolean("mode", mode)
editor.apply()
val prmode = preferences.getBoolean("mode", false)
NewJetpackComposeTheme(darkTheme = prmode) {
Surface(modifier = Modifier.fillMaxHeight(), color = MaterialTheme.colors.surface) {
App(prmode, prefViewModel)
}
}
}
Muhammad Zaryab Rafique
04/04/2021, 5:08 PM@Composable
fun App(mode: Boolean, prefViewModel: PrefViewModel) {
val image: Painter = if (mode) {
painterResource(R.drawable.baseline_light_mode_24)
} else {
painterResource(R.drawable.baseline_dark_mode_24)
}
Row(
modifier = Modifier
.fillMaxSize()
.padding(top = 10.dp, end = 20.dp),
horizontalArrangement = Arrangement.End,
) {
IconButton(onClick = { prefViewModel.onModeChange(!mode) }) {
Icon(
image,
"changeAppMode",
)
}
Spacer(modifier = Modifier.size(2.dp))
Text(modifier = Modifier.padding(top = 12.dp), text = stringResource(R.string.dark_mode))
}
}
Zach Klippenstein (he/him) [MOD]
04/04/2021, 6:01 PMZach Klippenstein (he/him) [MOD]
04/04/2021, 6:02 PMMuhammad Zaryab Rafique
04/04/2021, 6:13 PMColton Idle
04/04/2021, 11:14 PMMuhammad Zaryab Rafique
04/05/2021, 5:23 AMMuhammad Zaryab Rafique
04/05/2021, 5:24 AMsetContent {
val prefViewModel: PrefViewModel = viewModel()
val mode: Boolean by prefViewModel.mode.observeAsState(false)
val preferences = getSharedPreferences("AppMode", MODE_PRIVATE)
var prmode = preferences.getBoolean("mode", false)
if(prmode.equals(null)) {
prmode = mode
}
NewJetpackComposeTheme(darkTheme = prmode) {
Surface(modifier = Modifier.fillMaxHeight(), color = MaterialTheme.colors.surface) {
App(prmode,prefViewModel,preferences,this)
}
}
}
Muhammad Zaryab Rafique
04/05/2021, 5:24 AMclass PrefViewModel : ViewModel() {
private val _mode = MutableLiveData(false)
val mode: LiveData<Boolean> = _mode
fun onModeChange(newMode: Boolean , preferences: SharedPreferences) {
_mode.value = newMode
val editor = preferences.edit()
editor.putBoolean("mode", newMode)
editor.apply()
}
}
Zach Klippenstein (he/him) [MOD]
04/05/2021, 7:56 PMZach Klippenstein (he/him) [MOD]
04/05/2021, 10:08 PMgetSharedPreferences
is cached, but I would move that getSharedPreferences
call and the getBoolean
into your view model, do that “if null” logic in the view model, and just expose the actual mode for the composable to use from the view model.Muhammad Zaryab Rafique
04/06/2021, 8:02 AM