上班(5)

Posted on 2024-09-27 11:46  Capterlliar  阅读(5)  评论(0编辑  收藏  举报

1. content: @Composable ColumnScope.() -> Unit

ColumnScope,使得传入的参数可以使用Column的Modifier,从而在传入的composable里调整布局。

 

2. kotlin it和this的区别

 it指代lambda表达式的唯一变量,this指代当前对象
 
3. AlignmentArrangement
Alignment控制布局,Arrangement控制组件间关系
 
4. Modifer.semantics(mergeDescendants = true) {}
将子节点合并为一个语义节点,便于talkback读出所有其信息。除此之外还可以合并子节点,改变clickable范围等。例如,我将父节点clickable的enable设为false,但没有处理子节点,composeTestRule.onNodeWithText(TITLE).assertIsNotEnabled()的测试就会失败。可以使用composeTestRule.onRoot().printToLog("LogName")来查看节点情况。
 
5. compose列表动态添加节点
class Model {
    private val _nodeList: MutableList<@Composable () -> Unit> = mutableStateListOf()
    val nodeList: List<@Composable () -> Unit> = _nodeList

    fun add(node: @Composable () -> Unit) {
        _nodeList.add(node)
    }
}

@Composable
fun NodeList(title: String?, model: Model) {
    Category(title = title) {
        Column(
            modifier =
                Modifier.fillMaxWidth(),
            verticalArrangement = Arrangement.spacedBy(2.dp)
        ) {
            for (node in model.nodeList) {
                node()
            }
        }
    }
}

 

6. mutableStateListOf

列表内容变化时,compose组件会更新

 

7. rememberSaveable 和 remember

var checked by rememberSaveable { mutableStateOf(false) }

  • rememberSaveable: 这个函数用于在配置更改(例如屏幕旋转)或进程死亡后保存状态。它使用一些策略来保存状态,例如将状态存储在 Bundle 中或持久化到磁盘。
  • mutableStateOf(false): 这创建了一个可观察的状态对象,其初始值为 falsechecked 变量会代理到这个状态对象,这意味着对 checked 的读写操作实际上是对状态对象的读写操作。
  • 用途: 适用于需要在配置更改后仍然保留的状态,例如 checkbox 的选中状态、文本框的内容等。

val model = remember { PreferenceGroupModel() }

  • remember: 这个函数用于在 Composable 函数的重组过程中记住一个对象。当 Composable 函数第一次执行时,remember 会执行 lambda 表达式并返回结果。在后续的重组中,remember 会直接返回之前记住的结果,而不会再次执行 lambda 表达式。
  • PreferenceGroupModel(): 这创建了一个 PreferenceGroupModel 类的实例。这个类可能包含一些状态和其他逻辑。
  • 用途: 适用于不需要在配置更改后保留的状态,例如 ViewModel、临时计算结果等。

—— GPT