gpt4 book ai didi

android - 什么时候需要 Modifier.composed { ... }?

转载 作者:行者123 更新时间:2023-12-04 16:38:47 25 4
gpt4 key购买 nike

Modifier.composed { ... }是什么时候有用?如果我可以简单地做 Modifier.padding(),我为什么需要它?超过 Modifier.composed { PaddingModifier(...) } ?

最佳答案

Modifier.composed允许创建对 materializing 有用的组合感知修饰符工厂特定于实例,有状态的 修饰符。从文档:

Declare a just-in-time composition of a Modifier that will be composed for each element it modifies. composed may be used to implement stateful modifiers that have instance-specific state for each modified element, allowing the same Modifier instance to be safely reused for multiple elements while maintaining element-specific state.


换句话说,它允许您将提升状态注入(inject)特定于元素的 Modifier并使用 remember , DisposableEffect , Ambient等。例如:
fun Modifier.fancyModifier(
enabled: Boolean = false,
onClick: () -> Unit = {}
) = composed(inspectorInfo = debugInspectorInfo {
name = "fancyModifier"
value = enabled
}) {
var paddingValue by remember { mutableStateOf(0.dp) }
onCommit(enabled) {
paddingValue = if (enabled) 16.dp else 0.dp
}
fillMaxWidth()
.clickable { onClick() }
.padding(paddingValue)
}
LazyColumnFor(items = List(size = 10) { "$it" }) {
var enabled by remember { mutableStateOf(false) }
Text(
text = "fancy modifier",
modifier = Modifier.fancyModifier(enabled) {
enabled = !enabled
}
)
}
您也可以声明 InspectorInfo使用 debugInspectorInfo 帮助调试.从文档:

If inspectorInfo is specified this modifier will be visible to tools during development. Specify the name and arguments of the original modifier.as well as optionally declare InspectorInfo to help with debugging.


您可以使用 properties字段而不是 value如果您想要跟踪的不仅仅是值(value)。
注: debugInspectorInfo lambda 已从 release 中删除构建。
class FancyModifierTest {

@Before
fun setup() {
isDebugInspectorInfoEnabled = true
}

@After
fun teardown() {
isDebugInspectorInfoEnabled = false
}

@Test
fun testFancyModifierInspectableValue() {
val modifier = Modifier.fancyModifier() as InspectableValue
assertEquals(modifier.nameFallback, "fancyModifier")
assertEquals(modifier.valueOverride, false)
assertEquals(modifier.inspectableElements.toList().size, 0)
}

}
下面是一些更实际的例子:
  • JetSnack Gradient
  • JetCaster Gradient
  • InspectorInfo Samples
  • cs.android.com
  • 关于android - 什么时候需要 Modifier.composed { ... }?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64989659/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com