Compose əsasları: composable, recomposition, state
Jetpack Compose — deklarativ UI: ekranı state-in funksiyası kimi təsvir edirsən, framework dəyişiklikləri özü tətbiq edir. XML-dəki "view tap, dəyərini yenilə" imperativ modeli yoxdur.
Əsas anlayışlar:
- @Composable funksiya — UI-ın tikinti bloku; UI emit edir, dəyər qaytarmır; adları böyük hərflə.
- Recomposition — oxunan state dəyişəndə Compose yalnız həmin state-dən asılı composable-ları yenidən çağırır. Ağıllı skip: parametrlər dəyişməyibsə (stable tiplərdə equals), composable ötürülür.
- State:
remember { mutableStateOf(...) }— recomposition-lar arasında yaşayan dəyər;rememberSaveable— configuration change/prosesin ölümünə davamlı. - State hoisting — state-i yuxarı qaldır: uşaq composable
value+onValueChangealır, özü state saxlamır → yenidənistifadə və test asanlaşır. - Stateless vs stateful composable: stateless olanlar preview və test üçün ideal; stateful yalnız nazik wrapper olmalıdır.
// Stateless — yenidənistifadə olunan, test olunan
@Composable
fun AmountField(
amount: String,
onAmountChange: (String) -> Unit,
modifier: Modifier = Modifier
) {
OutlinedTextField(
value = amount,
onValueChange = onAmountChange,
label = { Text("Məbləğ") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
modifier = modifier
)
}
// Sahib — state ViewModel-dədir
@Composable
fun TransferScreen(viewModel: TransferViewModel = hiltViewModel()) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
AmountField(
amount = uiState.amount,
onAmountChange = viewModel::onAmountChanged
)
}State hoisting: stateless sahə + stateful sahib
İki klassik tələ: (1) remember-siz mutableStateOf — hər recomposition-da state sıfırlanır (sonsuz reset); (2) = ilə yox, by delegate və ya .value ilə oxumaq lazım olduğunu qarışdırmaq. Üçüncüsü müsahibə sualı kimi gəlir: recomposition nə vaxt "çox" olur? — cavab: state oxunuşunu mümkün qədər aşağı endir (yalnız oxuyan composable recompose olsun), unstable parametrlərdən (adi List əvəzinə ImmutableList/stable data class) qaç.
🛠 Tapşırıq
İlk Compose ekranını yaz (mövcud layihəyə ComposeView ilə və ya yeni layihədə):
- Sayğac düyməsi qur,
remember-i unut və dəyərin sıfırlandığını gör; sonra əlavə et. rememberilərememberSaveablefərqini rotation-da yoxla.- Bir
TextField-i state hoisting ilə stateless et (value+onValueChange) və@Previewyaz. - Siyahını
LazyColumn+key = { it.id }ilə qur.
Bitdi sayılır: eyni ekranı XML-də neçə fayl/sətirlə yazdığınla müqayisə edə bilirsənsə.
📚 Mənbələr və sənədlər
- Compose-un düşüncə modelirəsmideveloper.android.com
- Compose-da staterəsmideveloper.android.com
- Lifecycle və Composerəsmideveloper.android.com