Compose 遇到的坑

Compose焦点移动问题

焦点设置必须按照以下顺序,否则会有问题
Modifier 说明 必须顺序
focusRequester() 注册焦点请求器 放在 .focusable() 之前
onFocusChanged {} 监听焦点状态变化 放在 .focusable() 之前
focusable() 添加焦点节点 必须在最后!

示例如下:

@Composable
fun Test(modifier: Modifier = Modifier) {
    val focusRequester = remember { FocusRequester() }
    val focusRequester2 = remember { FocusRequester() }
    var color by remember { mutableStateOf(Color.White) }
    var color2 by remember { mutableStateOf(Color.White) }
    Column {
        LaunchedEffect(Unit) {
            focusRequester.requestFocus()
        }
        Text(
            "AAA",
            modifier = Modifier
                .size(200.dp)
                .background( color)
                .focusRequester(focusRequester)
                .onFocusChanged {
                    Log.d(TAG, "Test: AAA ${it.isFocused}")
                    color = if (it.isFocused) Color.Red else Color.White
                }
                .focusable(true)
                .clickable {
                    focusRequester.requestFocus()
                }
               )

        Spacer(modifier = Modifier.height(20.dp))
        Text(
            "BBB",
            modifier = Modifier
                .size(200.dp)
                .background(color = color2)
                .focusRequester(focusRequester2)
                .onFocusChanged {
                    color2 = if (it.isFocused) Color.Red else Color.White
                }
                .focusable(true)
                .clickable {
                    focusRequester2.requestFocus()
                })
    }
}

Compose 打印日志出现死循环问题

原本期望记录控制台打印的日志,在compose 方法体中直接调用类似记录日志更新页面方法,如果直接按照注释部分的代码进行拼接,会出现重组死循环问题 compose 不要直接调用更新状态的方法,使用LaunchedEffect等副作用

logContent.value = logContent.value + "\n" + "${Date().toString().substring(10)} $content"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容