Əsas məqamlar
@Composable — funksiyanı Composable-ə çevirən annotasiya. Composable funksiyalar UI qurucu bloklarıdır. Onlar View qaytarmır, Composition-a elementlər göndərir. Composition — Composable funksiya çağırışlarından qurulan UI ağacı. Compose yeni ağacı köhnə ilə müqayisə edir və yalnız dəyişmiş hissələri yeniləyir.
Recomposition — vəziyyət dəyişdikdə Composable funksiyalarının yenidən başladılması. Compose hər funksiyada hansı vəziyyətlərin oxunduğunu izləyir. Vəziyyət dəyişdikdə, Compose yalnız bu vəziyyəti oxuyan funksiyaları yenidən başladır (Smart Recomposition). Recomposition optimistdir: bir neçə dəfə işləyə bilər, buna görə funksiyalar təmiz olmalıdır (yan təsirsiz). Yan təsirlər LaunchedEffect və ya DisposableEffect-ə qoyulur. Composable funksiyalar suspend ola bilməz. Onlar digər Composable funksiyalardan çağırılır. Çağırış sırası təmin olunmur (Compose yenidən sıralaya bilər).
// State Hoisting və LazyColumn ilə Composable nümunəsi
@Composable
fun ItemList(
items: List<String>,
onItemClick: (String) -> Unit
) {
LazyColumn(
modifier = Modifier.fillMaxSize()
) {
items(items) { item ->
Card(
modifier = Modifier
.fillMaxWidth()
.clickable { onItemClick(item) }
.padding(8.dp)
) {
Text(
text = item,
style = MaterialTheme.typography.bodyLarge
)
}
}
}
}
@Composable
fun MainScreen() {
var text by remember { mutableStateOf("") }
val items = listOf("Item 1", "Item 2", "Item 3")
Scaffold(
topBar = {
TopAppBar(title = { Text("Compose App") })
}
) { padding ->
ItemList(
items = items,
onItemClick = { selected -> text = selected }
)
}
}Composition — deklarativ ağac. Recomposition — ağıllı yenidən başlatma. IT Sectr tip sabitliyini izləməyi tövsiyə edir — qeyri-sabit tiplər həddindən artıq yenidən kompozisiyaya səbəb olur.
CompositionLocal — Compose-da gizli məlumat ötürmə. SwiftUI-də @Environment-ə bənzəyir. CompositionLocalProvider — dəyər təyin etmək. current — oxumaq. Bunlar üçün istifadə olunur: Theme (MaterialTheme), ContentScale, Density. Statik CompositionLocal — dəyişiklik olmadan konfiqurasiya üçün. Dinamik CompositionLocal — dəyişən dəyərlər (tema) üçün. IT Sectr qlobal konfiqurasiyalar üçün CompositionLocal və məlumat üçün aşkar parametrlər istifadə etməyi tövsiyə edir.
remember — yenidən kompozisiya arasında dəyəri qoruyur. mutableStateOf — müşahidə oluna bilən vəziyyət yaradır (MutableState<T>). Dəyişdikdə, yenidən kompozisiyanı tetikler. State Hoisting — nümunə: vəziyyət valideyn komponentinə qaldırılır, uşaq dəyər + geri çağırış alır. State (dəyişməz) — yalnız oxumaq. MutableState — oxumaq + yazmaq. rememberSaveable — döndürmə/prosesin ölümü zamanı qalıcı olur.
State Hoisting — prinsip: state down, events up. Vəziyyət valideyndə saxlanılır və parametrlər vasitəsilə uşaq komponentlərinə ötürülür. Uşaq komponentlər dəyişiklikləri lambda (geri çağırış) vasitəsilə bildirir. Faydaları: təkrar istifadə, test edilə bilmə, tək həqiqət mənbəyi. Nümunə: MyTextField öz vəziyyətini saxlamaq əvəzinə, valideyn sətri saxlayır və onu value + onValueChange vasitəsilə ötürür.
derivedStateOf — hesablanmış vəziyyət, yalnız asılılıqlar dəyişdikdə yenidən hesablanır. Filtrləmə, çevirmə, doğrulama üçün istifadə olunur. snapshotFlow — State-i Flow-a çevirir. Reaktiv zəncirlər üçün istifadə olunur. collectAsState — Composable daxilində Flow-u State-də toplayır. IT Sectr hesablanmış dəyərlər üçün derivedStateOf və State-i koroutinlərə bağlamaq üçün snapshotFlow istifadə etməyi tövsiyə edir.
Column — şaquli düzən (LinearLayout şaquli bənzəri). Row — üfüqi düzən. Box — yığma düzən (FrameLayout bənzəri). LazyColumn — tənbəl yükləmə ilə şaquli sürüşdürülə bilən siyahı. LazyRow — üfüqi sürüşdürülə bilən siyahı. Scaffold — əsas ekran quruluşu: TopAppBar, BottomBar, FloatingActionButton, Snackbar. TopAppBar — yuxarı panel. BottomNavigation — aşağı naviqasiya (Material 3-də NavigationBar). Modifier — zəncir: .fillMaxWidth().padding(8.dp).clickable { }. Modifier sırası önəmlidir — hər biri yeni sarğı yaradır.
LazyColumn — virtual siyahı. Yalnız görünən elementləri göstərir. Optimizasiya: 1) key — element üçün unikal açar, 2) contentType — elementləri növə görə qruplaşdırma, 3) itemContent — element daxilində yenidən kompozisiyanı minimuma endirmə, 4) LazyVerticalGrid / LazyHorizontalGrid — şəbəkələr üçün. LazyLayout — fərdi tənbəl düzən. Paging 3 + Compose — collectAsLazyPagingItems vasitəsilə səhifələmə. IT Sectr proqnozlaşdırıla bilən yenidən kompozisiya üçün bütün LazyColumn-lərdə key(item) istifadə etməyi tövsiyə edir.
Navigation Compose — naviqasiya kitabxanası. NavController — təyinat yığınını idarə edir. NavHost — naviqasiya qrafiki üçün konteyner. composable("route") — təyinat qeydiyyatı. navController.navigate("route") — naviqasiya. popBackStack() — geri qayıtma. Arqumentlər: composable("detail/{id}", arguments = listOf(navArgument("id") { type = NavType.StringType })). intentFilter vasitəsilə dərin keçidlər. BottomNavigation — NavController ilə inteqrasiya: NavBarItem → navigate + popUpTo.
Çoxsaylı geri yığınları — hər BottomNavigation nişanı üçün ayrıca geri yığını. SavedStateHandle — prosesin ölümü zamanı arqumentləri qoruma. NavArgs — tip təhlükəsiz arqumentlər (Kotlin 2.0+). Dərin keçidlər — xarici keçidlər üçün URL sxemləri. Proqnozlaşdırıcı geri jesti (Android 14+) — ön izləmə ilə geri jest dəstəyi. IT Sectr tip təhlükəsizliyi üçün NavArgs və BottomNavigation üçün çoxsaylı geri yığınları istifadə etməyi tövsiyə edir.
LaunchedEffect — Composition-da suspend bloku işə salır. Composition-dan çıxanda ləğv edilir. keys dəyişdikdə yenidən başladılır. Bunlar üçün istifadə olunur: məlumat yükləmə, taymerlər, animasiyalar. DisposableEffect — təmizlənmə tələb edən resurslar üçün: onDispose { } — dinləyicilərdən abunəni ləğv etmə, bağlantıları bağlama. SideEffect — sinxron effekt (hər yenidən kompozisiyada). Bunlar üçün istifadə olunur: qeydiyyat, qeyri-Compose kodu ilə sinxronizasiya. IT Sectr məlumat yükləmə üçün LaunchedEffect və təmizlənmə üçün DisposableEffect istifadə etməyi tövsiyə edir.
| Parametr | Jetpack Compose | SwiftUI |
|---|---|---|
| UI təsviri | @Composable funksiya + Modifier | View Protocol + @ViewBuilder |
| Vəziyyət | remember + mutableStateOf | @State, @StateObject |
| Vəziyyət qaldırma | State Hoisting | @Binding |
| Siyahı | LazyColumn | List |
| Naviqasiya | NavController + NavHost | NavigationStack (iOS 16+) |
| Effektlər | LaunchedEffect, DisposableEffect | .task{}, .onAppear{} |
| Düzən | Column, Row, Box | VStack, HStack, ZStack |
Compose — funksiya + modifier. SwiftUI — struct + modifier. Anlayışlar oxşar, sintaksis fərqlidir. IT Sectr hər iki framework-ü öyrənməyi tövsiyə edir — birini başa düşmək digərini öyrənməyi asanlaşdırır.
rememberCoroutineScope — LaunchedEffect xaricində CoroutineScope-a giriş (məsələn, düymə klikində). snapshotFlow — zəncirlər üçün State-i Flow-a çevirmək. produceState — qeyri-Compose mənbəyini State-ə çevirmək. animateFloatAsState və animateColorAsState — effektlər vasitəsilə animasiyalar. IT Sectr UI hadisələri üçün rememberCoroutineScope və avtomatik yükləmə üçün LaunchedEffect istifadə etməyi tövsiyə edir.
MaterialTheme — Compose-un qlobal teması. Rənglər, tipoqrafiya, formalar. MaterialTheme { } — bütün tətbiqi sarır. Material3 (M3) — Google dizayn sistemi 2023+. Dynamic Colors — divar kağızına uyğunlaşma (Android 12+). TextStyle — mətn konfiqurasiyası: fontSize, fontWeight, lineHeight. Shape — künclərin yuvarlaqlaşdırılması. Elevation — kölgələr. IT Sectr standart olaraq Material3 və müasir cihazlar üçün Dynamic Colors istifadə etməyi tövsiyə edir.
@Composable
fun AppTheme(content: @Composable () -> Unit) {
val colorScheme = if (isSystemInDarkTheme()) {
darkColorScheme(
primary = Color(0xFFBB86FC),
secondary = Color(0xFF03DAC6)
)
} else {
lightColorScheme(
primary = Color(0xFF6200EE),
secondary = Color(0xFF03DAC6)
)
}
MaterialTheme(
colorScheme = colorScheme,
typography = Typography(
bodyLarge = TextStyle(fontSize = 16.sp)
)
) { content() }
}animateFloatAsState — Float dəyərini animasiya edir. animateColorAsState — rəngi animasiya edir. animateDpAsState — ölçünü animasiya edir. AnimatedVisibility — .animateEnterExit() ilə göstər/gizlət. AnimatedContent — məzmun dəyişdikdə animasiya (crossfade, slide). updateTransition — enum vəziyyətinə əsaslanan animasiya. Animatable — Animatable interfeysi vasitəsilə fərdi animasiya. IT Sectr siyahılar üçün AnimatedVisibility və ekran keçidləri üçün AnimatedContent istifadə etməyi tövsiyə edir.
@Composable
fun AnimatedCounter(count: Int) {
val animatedCount by animateFloatAsState(
targetValue = count.toFloat(),
animationSpec = spring(
dampingRatio = Spring.DampingRatioMediumBouncy,
stiffness = Spring.StiffnessLow
)
)
AnimatedContent(targetState = count) { targetCount ->
Text(
text = "$targetCount",
style = MaterialTheme.typography.displayLarge,
modifier = Modifier.animateContentSize()
)
}
}Compose UI Test — Compose ekranlarının testi. createComposeRule() — JUnit qaydası. setContent { } — Composable təyin etmə. onNodeWithText, onNodeWithTag, onNodeWithContentDescription — elementləri tapma. performClick, performTextInput, performScrollTo — hərəkətlər. assertIsDisplayed, assertTextEquals — iddialar. Semantics — əlçatanlıq və testlər üçün Semantics ağacı. IdlingResource — asinxron əməliyyatları gözləmə. Ekran görüntüsü testləri — Papercuts, Roborazzi. IT Sectr hər ekran üçün UI testləri və ViewModel üçün vahid testlər tövsiyə edir.
WindowSizeClass — ekran ölçüsünə uyğunlaşma (Compact, Medium, Expanded). Material3 cavabdeh düzenləri ilə əlaqəli. Adaptive Navigation Suite-də BottomNavigation-dan NavigationRail-ə avtomatik keçid üçün istifadə olunur. IT Sectr planşet və masaüstü Compose uyğunlaşması üçün WindowSizeClass istifadə etməyi tövsiyə edir.
Paging 3 + Compose — Google-dan səhifələmə kitabxanası. PagingData — səhifə axını. PagingConfig — ayarlar (pageSize, prefetchDistance). collectAsLazyPagingItems() — Compose-da toplama. PagingSource — fərdi mənbə. RemoteMediator — hibrid yükləmə (şəbəkə + DB). Paging 3 Compose-da sonsuz sürüşdürmə siyahıları üçün standartdır.
Tez-tez verilən suallar
@Composable — UI funksiyaları üçün annotasiya. Composable funksiya çağırışları Composition yaradır. Recomposition — vəziyyət dəyişdikdə yenidən başlatma.
State Hoisting — vəziyyəti valideynə qaldırmaq. State down, events up. Təkrar istifadə olunan və test edilə bilən komponentlər.
Recomposition — vəziyyət dəyişdikdə Composable funksiyalarının yenidən başladılması. Smart Recomposition — minimal funksiya dəsti.
NavController — təyinat yığını. NavHost — qrafik konteyneri. composable("route") — qeydiyyat. navigate() — keçid.
LaunchedEffect — avtomatik ləğv ilə suspend bloku. DisposableEffect — onDispose təmizlənmə ilə resurslar.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.