Compose rememberSaveable 理解

29 阅读1分钟

官方代码 rememberPagerState(listSaver 使用)

fun rememberPagerState(
    initialPage: Int = 0,
    initialPageOffsetFraction: Float = 0f
): PagerState {
    return rememberSaveable(saver = PagerState.Saver) {
        PagerState(initialPage = initialPage, initialPageOffsetFraction = initialPageOffsetFraction)
    }
}
val Saver: Saver<PagerState, *> = listSaver(
    save = {
        listOf(
            it.currentPage,
            it.currentPageOffsetFraction
        )
    },
    restore = {
        PagerState(
            initialPage = it[0] as Int,
            initialPageOffsetFraction = it[1] as Float
        )
    }
)

mapSaver

val CitySaver = run {  
    val nameKey = "Name"  
    val countryKey = "Country"  
    mapSaver(  
        save = { mapOf(nameKey to it.name, countryKey to it.country) },  
        restore = { City(it[nameKey] as String, it[countryKey] as String) }  
    )  
}

rememberSaveable 处理因意外导致页面销毁重建,数据不丢失问题。