Search code examples
kotlinandroid-jetpack-composecompose-recomposition

Do I need use remember only for a title in Scaffold?


I'm learning Compose, the following code is from the article.

The author use var toolbarTitle by remember { mutableStateOf("Home") } only for a title, is it necessary ?

I think var toolbarTitle= mutableStateOf("Home") is enough, right?

Source Code

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            JetpackComposeScaffoldLayoutTheme {
                // A surface container using the 'background' color from the theme
                Surface(color = MaterialTheme.colors.background) {
                    var toolbarTitle by remember {
                        mutableStateOf("Home")
                    }
                    val scaffoldState =
                        rememberScaffoldState(rememberDrawerState(initialValue = DrawerValue.Closed))
                    val scope = rememberCoroutineScope()

                    Scaffold(
                        modifier = Modifier.background(Color.White),
                        scaffoldState = scaffoldState,
                        topBar = {
                            AppToolbar(
                                scaffoldState = scaffoldState,
                                scope = scope,
                                toolbarTitle = toolbarTitle
                            )
                        }, drawerContent = {
                            DrawerContent(scaffoldState = scaffoldState, scope = scope)
                        },
                       ...
                    )
                }
            }
        }
    }
}

Solution

  • If you don't use remember the value will reset again to Home on every recomposition by using remember the value will be persisted even after a recomposition

    by the way recomposition means when the composable renders again which can happen a lot of times when something changes on the screen and needs to be rendered again