返回首页

kotlin 学习笔记 UI 1

记录学习 kotlin 知道的知识点

= remember

val initialDeepLinkBackStack = remember { intent.data?.handleDeepLink() }

{} 函数只执行一次,返回值作为变量的值,UI重组使用上次的值

val count = remember {
    mutableStateOf(0)
}

类型是 MutableState<Int>
通过 count.value 读取和写入,变化的时候会触发 UI 重组

val navigator = remember(navigationState) { Navigator(navigationState) }

如果 () 内的值变化要重新设置

by remember

val count by remember {
    mutableStateOf(0)
}

使用的时候不用 .value

rememberSaveable

var isOpenedByDeepLink by rememberSaveable { mutableStateOf(initialDeepLinkBackStack != null) }

初始值是 initialDeepLinkBackStack != null
Activity 销毁会保存状态

val scope = rememberCoroutineScope()

协程,生命周期绑定compose函数
UI 组件消失的时候协程结束
常在按钮点击时 coroutineScope.launch {} 执行 {} 里面的函数

@Composable

@Composable 标注一个函数,当这个函数执行的时候会向 UI 系统发送 UI 信息

rememberSerializable

Activity 重建后可以恢复状态

val topLevelKey = rememberSerializable(
        serializer = MutableStateSerializer(NavKeySerializer()),
    ) {
        mutableStateOf(initialTopLevelKey)
    }

需要设置 serializer ,类型是 KSerializer

import kotlinx.serialization.Serializable

@Serializable
data class User(
    val name: String,
    val age: Int
)

一般可以使用 User.serializer()

key

navigationItems.forEach { navigationItem ->
            key(navigationItem.navKey) {
                NavigationDrawerItem(
                    label = { Text(stringResource(id = navigationItem.labelResourceId)) },
                    icon = { Icon(painterResource(navigationItem.iconResourceId), null) },
                    selected = currentTopLevelKey == navigationItem.navKey,
                    onClick = {
                        navigate(navigationItem.navKey)
                        closeDrawer()
                    },
                    modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding),
                )
            }
        }

使用 key 防止列表错乱