Ciclo de vida da função que pode ser composta

O jetpack compose é um kit de ferramentas de interface do usuário moderno para Android. é uma UI declarativa que substitui a Imperativa (xml).
da maneira clássica que você usa para lidar com muitas atividades ou ciclo de vida de fragmentos. ( onStart , onCreate , onResume …etc)
segundo documentos oficiais :
O ciclo de vida de um elemento que pode ser composto é definido pelos seguintes eventos: entrada na composição, recomposição 0 ou mais vezes e saída da composição.
então temos três eventos:
I. Insira a composição
II . Obtendo recomposição por N vezes
III. deixando a composição
Uma composição só pode ser produzida por uma composição inicial e atualizada por recomposição . A única maneira de modificar uma composição é através da recomposição .
por exemplo:
@Composable
fun MoviesScreen(movies: List<Movie>) {
Column {
for (movie in movies) {
key(movie.id) { // Unique ID for this movie
MovieOverview(movie)
}
}
}
}
caso contrário, teremos que lidar com a recomposição sem a necessidade de chamar a função.
Se um elemento que pode ser composto já estiver na composição, ele poderá ignorar a recomposição se todas as entradas estiverem estáveis e não tiverem sido alteradas.
então como fazer a recomposição?
a recomposição depende do tipo de variável de função combinável
se as variáveis forem de tipos estáveis (( Boolean
, Int
, Long
, Float
, Char
, etc), nenhuma recomposição ocorrerá.
então como converter esses tipos estáveis em um tipo que pode levar à recomposição?
bem, de acordo com documentos oficiais :
As funções que podem ser compostas podem usar a remember
API para armazenar um objeto na memória. Um valor calculado por remember
é armazenado na composição durante a composição inicial e o valor armazenado é retornado durante a recomposição. remember
pode ser usado para armazenar objetos mutáveis e imutáveis.
portanto, temos a interface MutableState<T> para adicionar mutabilidade à nossa função de composição, para que a recomposição ocorra sempre que o valor desse tipo for alterado.
a classe MutableState<T> se for do tipo State<T>
interface MutableState<T> : State<T> {
override var value: T
}
mutableStateOf
var list by remeber{mutableStateOf(initialValue)}
or
val list = remember { mutableStateOf(initialValue) } // val variable will not change
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
list.value = ….
existem outros tipos de estado além de State<T> ou MutableState<T> , o Compose também oferece suporte ao seguinte:
- Dados ao vivo
- Fluxo
- RxJava2
obrigado por ler :)
referências :