用喷气背包中修饰符的良好做法构成
#kotlin #android #jetpackcompose

写作时,使用modificadores-修饰符自定义或添加行为是自然的。

由于使用修饰符是直观的,因此在不考虑某些好的实践中写信给自己很常见,这些实践在应用​​程序上有很大差异,以简化代码甚至在性能问题中。

考虑到这些详细信息,在本文中,我将向您展示可以用修饰符的JetPack Compiss优化代码和性能的吨,我们走吧吗?

修饰符padrãepo

第一个好练习更多的是惯例!著名的标准修饰符:

Column(Modifier.fillMaxSize()) {
    Button(
        onClick = { /*TODO*/ },
        Modifier.fillMaxWidth()
    ) {
        Text(
            text = "button text test",
            Modifier
                .padding(8.dp)
                .background(
                    Color.Gray.copy(alpha = 0.5f),
                    RoundedCornerShape(20.dp)
                )
        )
    }
}

我不知道您是否已经注意到了它,但是JetPack Compiss的Lib或其他LIB(例如设计材料的Lib)都可以使用的每一个可用的综合,具有标准修饰符为第一个可选的Parano

这种实用的原因是允许在视觉修改,事件等中对任何修饰符的任何组合物进行个性化化。换句话说,当我们创建一个由我们的组成时,非常建议您有一个模式修饰符来弯曲个性化!

添加标准修饰符

修饰符添加标准仅要求它是带有值Modifier的第一个可选parano,并且它修改了第一个组合:

@Composable
fun MyButton(
    text: String,
    modifier: Modifier = Modifier
) {
    Box(
        modifier
            .padding(8.dp)
    ) {
        Text(
            text = text,
            Modifier
                .align(Alignment.Center)
        )
    }
}

使用这种方法,我们可以使用不同的公园的相同按钮:

Column {
    MyButton("meu primeiro botão")
    MyButton(
        "meu segundo botão",
        Modifier
            .fillMaxWidth()
            .padding(8.dp)
            .background(Color.Gray, RoundedCornerShape(20.dp))
    )
}

App em execução apresentando 2 composables de MyButton em coluna. O primeiro composable apresenta apenas o texto 'meu primeiro botão' com fundo branco, o segundo apresenta o texto 'meu segundo botão' preenchendo a largura disponível e com espaçamento, também, o fundo é cinza com bordas arredondadas

这是迄今为止我最喜欢JetPack Compiss的特征之一! ð

重复使用修饰符

良好的实用是重复使用修饰符,这是正确的!我们有能力提取修饰符并重用它们:

Column {
    val myButtonModifier = Modifier
        .fillMaxWidth()
        .padding(8.dp)
        .background(Color.Gray, RoundedCornerShape(20.dp))
    MyButton("meu primeiro botão")
    MyButton(
        "meu segundo botão",
        myButtonModifier
    )
    Box(
        modifier = myButtonModifier
            .height(200.dp)
    )
}

App em execução apresentando 2 composables MyButton e 1 Box em coluna. O primeiro composable apresenta apenas o texto 'meu primeiro botão' com fundo branco, o segundo apresenta o texto 'meu segundo botão' preenchendo a largura disponível e com espaçamento, também, o fundo é cinza com bordas arredondadas. O Terceiro apresenta a mesma aparência do segundo composable, com a diferença de uma altura maior

在此样本中,我们重复使用与第三个Box中的第二个植物体相同的外观!请注意,我们仍然保持着根据需要调整Box的灵活性,例如应用不同的高度。

重用修饰符的优势

除了减少代码量外,Modifier的重复使用有助于优化重新分配,因为在受影响的组合中也再次执行修饰符。

影响更大的案例是倾向于不断推荐的实施,例如使用动物或实施Lazies(LazyColumn,Koud5等)。

修改器提取在Composebles的范围之外

要优化这些情况,我们必须考虑在组合范围之外的修饰符提取。首先,它似乎是抽象的,让我们考虑一个例子:

val myButtonModifier = Modifier
    .padding(8.dp)
    .fillMaxWidth()
    .background(Color.Gray, RoundedCornerShape(20.dp))

@Composable
fun MyLazyColumn() {
    LazyColumn {
        items(1000) {
            MyButton(
                "meu segundo botão",
                myButtonModifier
            )
        }
    }
}

是!只有这种小的提取才能通过频繁的重组来优化和大量实现!另外,可以将修饰符重复使用其他组合物,因为它是全球访问的。

在组合范围内的修改器提取

尽管从范围中提取的修改器提取具有其优势,但在某些情况下,不可能,例如特定组合的范围的修饰符。

在这种情况下,最著名的组合是布局为koud1,koud7或koud8。两者都提供特定的范围,可允许使用独家修饰符,例如允许儿童对齐的Koud9:

@Composable
fun MyColumn() {
    Column {
        val myButtonModifier = Modifier
            .padding(8.dp)
            .width(200.dp)
            .background(Color.Gray, RoundedCornerShape(20.dp))
            .align(CenterHorizontally)
        MyButton("meu primeiro botão")
        MyButton(
            "meu segundo botão",
            myButtonModifier
        )
        Box(
            modifier = myButtonModifier
                .height(200.dp)
        )
    }
}

App em execução apresentando 2 composables MyButton e 1 Box em coluna. O primeiro composable apresenta apenas o texto 'meu primeiro botão' com fundo branco, o segundo apresenta o texto 'meu segundo botão' centralizado, o fundo é cinza com bordas arredondadas. O Terceiro apresenta a mesma aparência do segundo composable, com a diferença de uma altura maior

一种替代方法是通过添加该范围的修饰符来提取可组成的新组成:

val myButtonModifier = Modifier
    .padding(8.dp)
    .width(200.dp)
    .background(Color.Gray, RoundedCornerShape(20.dp))

@Composable
fun MyColumn() {
    Column {
        val myButtonColumnModifier =
            myButtonModifier
                .align(CenterHorizontally)
        MyButton("meu primeiro botão")
        MyButton(
            "meu segundo botão",
            myButtonColumnModifier
        )
        Box(
            modifier = myButtonColumnModifier
                .height(200.dp)
        )
    }
}

您如何看待使用修饰符的这些良好实践?有一些不同的技术使用并找到有趣的分享,享受和留在这里的评论。 ð