gpt4 book ai didi

android - 如何提升多个状态?

转载 作者:行者123 更新时间:2023-12-04 03:49:28 27 4
gpt4 key购买 nike

当我们谈论 Compose我们一定会面对state hoisting的方法.这很舒服,不需要火箭科学知识。但是这里会出现一堆其他问题和另一堆可能的解决方案。这就是通过 fun 声明传递的众多参数。回到过去的美好时光,我们可以让自己拥有一个可以容纳大部分参数的容器(简单的一个)。另一方面,我们可以使用默认参数,但无论如何这无助于处理多行( 巨大的 )函数声明行。这里有什么想法吗?
如果我们再深入一点并查看 androidx.compose.*** ( Material ,即)包我们会发现很多可组合的东西实际上有很多用于状态提升的参数(lambdas)。所以我认为这是一种常见的方法。
我们可以接TextField可组合的,这是我所说的一个很好的例子:

@Composable
fun TextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
textStyle: TextStyle = AmbientTextStyle.current,
label: @Composable (() -> Unit)? = null,
placeholder: @Composable (() -> Unit)? = null,
leadingIcon: @Composable (() -> Unit)? = null,
trailingIcon: @Composable (() -> Unit)? = null,
isErrorValue: Boolean = false,
visualTransformation: VisualTransformation = VisualTransformation.None,
keyboardType: KeyboardType = KeyboardType.Text,
imeAction: ImeAction = ImeAction.Unspecified,
onImeActionPerformed: (ImeAction, SoftwareKeyboardController?) -> Unit = { _, _ -> },
onTextInputStarted: (SoftwareKeyboardController) -> Unit = {},
interactionState: InteractionState = remember { InteractionState() },
activeColor: Color = MaterialTheme.colors.primary,
inactiveColor: Color = MaterialTheme.colors.onSurface,
errorColor: Color = MaterialTheme.colors.error,
backgroundColor: Color = MaterialTheme.colors.onSurface.copy(alpha = ContainerAlpha),
shape: Shape =
MaterialTheme.shapes.small.copy(bottomLeft = ZeroCornerSize, bottomRight = ZeroCornerSize)
)
当然,它还包含很多配置参数和 composable slots .
尽管如此,问题仍然存在。
当这种情况发生时,我几乎没有选择:
  • 可与许多可能的用户事件组合的复杂 UI,即 TextField
  • 一个复杂的 UI 结构/层次结构,具有多个相互包装的组合,需要将事件/用户输入从底部提升到顶部。好吧,提升可以通过每个级别增加参数(lambdas)的级别。
  • Your case here

  • 附言我并不是说它是错误的或者它有什么不好,只是试图找到一种舒适的方式。
    附言我知道这一切都是为了权衡取舍。

    最佳答案

    我个人认为将参数结构化为 data classes可以为消费者和提供者提供更多的可读性。
    例如:activeColor , inactiveColor , errorColor , backgroundColor .可以搬进

    data class TextFieldColors(
    val activeColor: Color,
    val inactiveColor: Color,
    val errorColor: Color,
    val backgroundColor: Color)
    (请原谅这里的命名)
    您可以对图标、占位符进行类似的操作,并且基本上以对提供者和消费者都有意义的方式构建参数。
    此外,我相信重用这些已经创建的 Parameter 类可以在扩展现有组件时有所帮助。

    关于android - 如何提升多个状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64621371/

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