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 防止列表错乱