Mehdi Haghgoo

    Mehdi Haghgoo

    10 months ago
    I have created a state holder containing some states of my app, e.g. RECORDING, PLAYING, etc. But, changes I make to the state do not invoke recomposition. Continued...
    Here's the state holder:
    class AppState(
        val player: MediaPlayer,
        val recorder: MediaRecorder,
        var mediaState: MediaState,
        val scaffoldState: ScaffoldState,
        val navController: NavHostController,
        private val resources: Resources
        fun navigateToBottomBarRoute(route:String){
                    saveState = true
                restoreState = true
                launchSingleTop = true
        fun showSnackbar(message: String){
            GlobalScope.launch {
                scaffoldState.snackbarHostState.showSnackbar(message, duration = SnackbarDuration.Long)
    And i access the state as follows:
    fun rememberAppState(
        player: MediaPlayer,
        recorder: MediaRecorder,
        mediaState: MediaState,
        scaffoldState: ScaffoldState,
        navController: NavHostController,
        resources: Resources = LocalContext.current.resources
    ) = remember(player, recorder, mediaState, scaffoldState, navController, resources){
           AppState(player, recorder, mediaState, scaffoldState, navController, resources)
    For some reason, when I change the value of a component e.g. mediaState, the composables using it are not recomposed, so my UI is not updated unless I navigate to another screen and come back to see the updated UI.
    Zach Klippenstein (he/him) [MOD]

    Zach Klippenstein (he/him) [MOD]

    10 months ago
    Your mediaState property isn't backed by a MutableState so Compose has no way of knowing when it changes.