Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Quando utilizar o "by" ou "=" no remember (Jetpack Compose)

Bom dia a todos

Neste curso estamos utilizando o remember para armazenar variáveis que gerenciam estados, como dados de formulário, do campo de busca e etc. Mas algumas dessas variáveis recebem o by, como neste caso:

var text by remember {
    mutableStateOf(searchText)
}

e outras o =

    val state = remember {
        HomeScreenUiState()
    }

O que não ficou muito claro para mim é a diferença entre os dois e exatamente quando utilizar um ou outro.

Ps: no caso do uso do =, se tento utilizar o by o android studio avisa essa mensagem:

Type 'TypeVariable(T)' has no method 'getValue(Nothing?, KProperty<*>)' and thus it cannot serve as a delegate

Mas não entendi exatamente o que isso significa

1 resposta
solução!

Olá, Murilo!

Ótima pergunta! A diferença entre o uso de "by" e "=" no remember do Jetpack Compose está relacionada ao tipo de propriedade que você está utilizando.

Quando você utiliza o "by", você está delegando a propriedade a um objeto que implementa a interface "ReadWriteProperty". Isso significa que você está usando uma propriedade delegada, que é capaz de gerenciar o estado da variável de forma automática. No exemplo que você deu, a propriedade "text" é uma propriedade delegada que utiliza o "mutableStateOf" para gerenciar o estado da variável "searchText". Isso permite que o estado seja atualizado automaticamente quando necessário.

Por outro lado, quando você utiliza o "=", você está simplesmente atribuindo um valor à variável. Nesse caso, você está criando uma nova instância da classe "HomeScreenUiState" e atribuindo-a à variável "state".

A diferença entre os dois está na forma como o estado é gerenciado. Com o uso do "by", o estado é gerenciado automaticamente pela propriedade delegada, enquanto com o uso do "=", você precisa gerenciar manualmente o estado da variável.

Quanto à mensagem de erro que você mencionou, ela indica que o tipo da variável não é compatível com o uso do "by". Certifique-se de que o tipo da variável seja compatível com uma propriedade delegada.

Espero ter ajudado a esclarecer sua dúvida! Se tiver mais alguma pergunta, é só me perguntar. Bons estudos!