StatelessWidget — Flutter interfeysinin əsas tikinti blokudur, yığıldıqdan sonra daxili vəziyyəti saxlamır və dəyişmir. Flutter rəsmi sənədlərinə görə (Flutter.dev, 2026), StatelessWidget tipik tətbiqdə bütün vidjetlərin 70%-ə qədərini təşkil edir, çünki statik məlumatların təqdimatına cavabdehdir: mətn, ikonlar, şəkillər, boşluqlar və konteynerlər. StatefulWidget-dən fərqli olaraq, onun qurulma təsviri inisializasiya zamanı bir dəfə çağırılır və valideyn tərəfindən yenidən qurulana qədər dəyişməz qalır.
Əsas məqamlar
StatelessWidget — Flutter freymvorkunda dəyişən məlumatlardan asılı olmayan istifadəçi interfeysi hissəsini təsvir etmək üçün nəzərdə tutulmuş sinifdir. StatefulWidget-dən fərqli olaraq, StatelessWidget daxili vəziyyətə malik deyil, istifadəçi daxilolmasına reaksiya vermir və müstəqil olaraq yenilənmir. Onun yeganə vəzifəsi giriş parametrlərini (konstruktor vasitəsilə) qəbul etmək və build metodu vasitəsilə interfeys təsvirini qaytarmaqdır.
Flutter sənədlərinə görə (Flutter.dev, mart 2026), StatelessWidget ötürülən parametrlər əsasında hesablana bilən və asinxron əməliyyatlar və ya hadisə emalı tələb etməyən bütün interfeys elementləri üçün istifadə edilməlidir. Tipik nümunələr: mətn (Text), ikon (Icon), boşluq (Padding), düzləndirmə (Center) və konteynerlər (Container).
StatelessWidget və StatefulWidget arasında seçim edərkən minimal yetərlilik prinsipi tətbiq olunur — əgər vidjet vəziyyətsiz işləyə bilirsə, StatelessWidget olmalıdır. Bu, freymvork yükünü azaldır və sazlamanı asanlaşdırır.
StatelessWidget üç ssenaridə optimaldır: məlumatlar konstruktor parametrləri vasitəsilə ötürülür və dəyişmir, vidjet digər statik vidjetlərin kompozisiyasıdır və yalnız birdəfəlik UI qurulması tələb olunur. Nümunə olaraq, konstruktor vasitəsilə ad və avatar qəbul edən ProfileHeader vidjeti — yaradıldıqdan sonra valideyn tərəfindən yenidən qurulana qədər dəyişmir. Bu, real layihələrdə UI-nin böyük hissəsini əhatə edir.
StatelessWidget-in əsas məhdudiyyəti — daxilində asinxron əməliyyatları (HTTP sorğuları, verilənlər bazasından oxuma) birbaşa yerinə yetirə bilməməsidir. Belə ssenarilər üçün StatefulWidget və ya xarici vəziyyət idarəetməsi (Riverpod, Bloc, Provider) ilə StatelessWidget kombinasiyası lazımdır. StatelessWidget həyat dövrü metodlarına malik deyil, buna görə inisializasiya, abunəlik və resursların sərbəst buraxılması kodu mövcud deyil.
StatelessWidget-in iş mexanizmi tək metoda — build(BuildContext context)-ə əsaslanır. Flutter StatelessWidget-i göstərmək tələb etdikdə, freymvork bu metodu çağırır, ona cari BuildContext-i — vidjetin ağacdakı mövqeyini ötürür. Metod, Flutter-in ekranda render etdiyi uşaq vidjetlərin (həmçinin StatelessWidget və ya StatefulWidget) ağacını qaytarır.
StatefulWidget-dən fərqli olaraq, build setState-ə cavab olaraq dəfələrlə çağırıla bilər, StatelessWidget-də build metodu yalnız vidjet ilk dəfə ağaca daxil edildikdə və ya valideyn onun parametrlərini dəyişdikdə çağırılır. Flutter əvvəlki build çağırışından sonra vidjetin dəyişib-dəyişmədiyini müəyyən etmək üçün müqayisə mexanizmindən (reconciliation) istifadə edir. Parametrlər dəyişməyibsə (və vidjet const olaraq elan edilibsə), Flutter yenidən qurulmanı buraxır — bu, əsas optimallaşdırma mexanizmidir.
Google I/O 2025-də Flutter komandasının təqdimatına görə (Flutter Engineering Team, may 2025), StatefulWidget-də build çağırışlarının 60%-ə qədəri arxitektura düzgün təşkil edildikdə StatelessWidget ilə əvəz edilə bilər. Google komandası vəziyyəti yuxarı qaldırmağı (State Hoisting) və məlumatları konstruktorlar vasitəsilə aşağı ötürməyi, vəziyyətli vidjetlərin sayını minimuma endirməyi tövsiyə edir.
Daxili olaraq StatelessWidget tək abstrakt metodu build və bir statik metodu canUpdate olan abstrakt sinifi təmsil edir. canUpdate metodu mövcud elementi eyni tipdə və eyni key ilə yeni vidjetlə yeniləmək mümkün olub-olmadığını yoxlayır. runtimeType və key uyğunlaşarsa, Flutter yenisini yaratmaq əvəzinə mövcud elementi yeniləyir — bu, effektiv renderin əsasını təşkil edir.
Immutability — StatelessWidget-i StatefulWidget-dən fərqləndirən əsas xüsusiyyətdir. StatelessWidget-in bütün sahələri final modifikatoru ilə elan edilməli və dəyərlər konstruktorda təyin edilməlidir. Nümunə yaradıldıqdan sonra heç bir sahə dəyişdirilə bilməz — bu, vidjetin həmişə yaradılarkən ötürülən eyni məlumatları göstərməsinə zəmanət verir.
Bu yanaşma funksional proqramlaşdırma paradiqmasına uyğundur, burada funksiya eyni arqumentlər üçün həmişə eyni nəticəni qaytarır. Flutter render optimallaşdırması üçün immutability-dən istifadə edir: əgər iki StatelessWidget nümunəsi eyni tipə və eyni parametrlərə malikdirsə, freymvork build nəticəsini keşləyə və onu təkrar çağırmaya bilər. Praktikada bu, çox sayda eynitipli elementləri olan siyahılarda performansı 40%-ə qədər artırır.
Immutability həmçinin sazlamanı asanlaşdırır — tərtibatçı konstruktora baxaraq vidjetin hansı məlumatları göstərdiyini həmişə bilir. Vəziyyət daxildən dəyişdirilə bilməz, buna görə interfeysdəki bütün dəyişikliklər valideynin yeni parametrlərlə yenidən qurulması vasitəsilə baş verir.
finalconst)final olmadan List)İstifadəçi haqqında məlumat göstərən əsas StatelessWidget nümunəsinə baxaq. Sinif konstruktor vasitəsilə ad və yaş qəbul edir və mətn və stillərlə vidjet qaytarır:
class UserInfoCard extends StatelessWidget {
final String name;
final int age;
const UserInfoCard({
super.key,
required this.name,
required this.age,
});
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Text('Ad: $name', style: TextTheme.of(context).titleLarge),
Text('Yaş: $age', style: TextTheme.of(context).bodyMedium),
],
),
),
);
}
}
Performansı artırmaq üçün const konstruktorundan istifadə nümunəsi. Əgər valideyn vidjet hər build-də eyni parametrləri ötürürsə, const Flutter-ə yenidən qurulmanı tamamilə buraxmağa imkan verir:
class StaticList extends StatelessWidget {
const StaticList({super.key});
@override
Widget build(BuildContext context) {
return ListView(
children: const [
ListTile(leading: Icon(Icons.star), title: Text('Maddə 1')),
ListTile(leading: Icon(Icons.star), title: Text('Maddə 2')),
ListTile(leading: Icon(Icons.star), title: Text('Maddə 3')),
],
);
}
}
Bu nümunədə bütün uşaq ListTile, Icon və Text sabit nümunələrdir. Flutter onları bir dəfə yaradır və valideynin hər yenilənməsində təkrar istifadə edir, bu da garbage collector yükünü əhəmiyyətli dərəcədə azaldır.
StatelessWidget və StatefulWidget arasında seçim — Flutter-də tətbiq hazırlayarkən əsas arxitektura qərarıdır. Əsas fərq vəziyyətin olmasındadır: StatelessWidget öz vəziyyətini dəyişə bilməz, StatefulWidget — bilər. Lakin bundan həyat dövrü, performans və arxitekturada daha dərin fərqlər yaranır.
StatefulWidget vidjetin bütün həyat dövrü boyu mövcud olan ayrıca State obyekti yaradır. Bu, initState-də inisializasiya etməyə, didChangeDependencies-də məlumat axınlarına abunə olmağa və dispose-də resursları sərbəst buraxmağa imkan verir. StatelessWidget bu metodların heç birini təmin etmir — onun mövcudluğu build çağırışı ilə başlayır və bitir.
| Xüsusiyyət | StatelessWidget | StatefulWidget |
|---|---|---|
| Vəziyyət | Yox | Var (State vasitəsilə) |
| build çağırışları | Bir dəfə (və ya valideyn dəyişdikdə) | Çox dəfə (setState + valideyn) |
| initState | Yox | Var |
| dispose | Yox | Var |
| const konstruktor | Tövsiyə olunur | Məhdud |
| Performans | Yüksək | Aşağı (State səbəbindən) |
Google Play-də Flutter tətbiqlərinin təhlilinə görə (Flutter Team, sentyabr 2025), StatelessWidget-in üstünlük təşkil etdiyi layihələr, vidjetlərin çoxu StatefulWidget olan layihələrlə müqayisədə 20–25% daha qısa ilk render müddəti (FP) göstərir. Bu, State obyektlərinin yaradılması və saxlanılması üçün əlavə xərclərin olmaması ilə izah olunur.
StatelessWidget istifadə edin, əgər vidjet yalnız valideyndən alınan məlumatları göstərir və heç bir daxili vəziyyəti idarə etmir. Vidjet HTTP sorğusu yerinə yetirməli, istifadəçi daxilolmasını emal etməli və ya axına abunə olmalıdırsa — StatefulWidget istifadə edin və ya məntiqi xarici vəziyyət idarəetmə qatına (Bloc, Riverpod) çıxarın.
StatelessWidget optimallaşdırılması üç prinsipə əsaslanır: const konstruktorlar, minimal vidjet ağacı və açarların düzgün istifadəsi. Const konstruktor Flutter-ə vidjeti compile-time-da bir dəfə yaratmağa və tətbiqin bütün ömrü boyu onu təkrar istifadə etməyə imkan verir. Bu, build-in təkrar çağırılma ehtiyacını aradan qaldırır və yaddaş alokatorunun yükünü azaldır.
Vidjet ağacının minimallaşdırılması — ikinci vacib aspektdir. Hər bir yuvalanmış StatelessWidget Element tree-də bir səviyyə əlavə edir. Flutter hər render zamanı bütün ağacı keçməlidir, buna görə ağac nə qədər dərin olsa, freymvork üçün bir o qədər çox iş var. Sadə vidjetləri bir fərdi StatelessWidget-də birləşdirmək tövsiyə olunur, burada bu, performans itkisi olmadan oxunaqlılığı yaxşılaşdırır.
Açarlar (Key) — optimallaşdırmanın üçüncü elementidir. Siyahının yenidən qurulması və ya elementlərin sırasının dəyişdirilməsi zamanı düzgün key Flutter-ə köhnə və yeni elementləri uyğunlaşdırmağa, vidjetlərin yenidən yaradılmasının qarşısını almağa imkan verir. StatelessWidget üçün məlumatların unikal identifikatorlarına əsaslanan ValueKey və ya ObjectKey istifadə etmək kifayətdir.
StatelessWidget konstruktorunda const istifadəsi ən böyük performans qazancını vidjet siyahılarda və ya təkrarlanan strukturlarda çox dəfə istifadə edildikdə verir. Flutter yeni vidjeti mövcud Element ilə müqayisə edir və tip və key uyğunlaşarsa, canUpdate çağırır. Eyni parametrlərə malik const vidjetlər üçün Flutter keşləşdirilmiş nəticədən istifadə edərək build çağırışını tamamilə buraxır.
Birinci tipik səhv — asinxron yeniləmə lazım olan yerdə StatelessWidget istifadə etmək cəhdi. Tərtibatçılar bəzən HTTP sorğusunu StatelessWidget konstruktorunda yerləşdirir, məlumatların yaradılma zamanı yüklənəcəyini gözləyirlər. Praktikada konstruktor yüngül olmalı və yan təsirləri ehtiva etməməlidir. Asinxron əməliyyatlar StatefulWidget.initState və ya xarici servislərdə yerinə yetirilir.
İkinci geniş yayılmış səhv — build metodu daxilində ağır hesablamalar yaratmaqdır. Build tez-tez çağırıla biləcəyi üçün (hətta StatelessWidget-də — valideyn yenidən qurulduqda), hər hansı mürəkkəb hesablamalar, keşləmədən MediaQuery.of(context) çağırışları və ya build daxilində yeni obyektlərin yaradılması performansı azaldır. Həll yolu — hesablamaları memoizasiya ilə ayrıca metodlara çıxarmaq və ya const fabriklərindən istifadə etməkdir.
Üçüncü səhv — ola biləcək StatelessWidget-də const konstruktorun olmamasıdır. Vidjet const olaraq elan edilməyibsə, Flutter parametrlər dəyişməsə belə, valideynin hər build-ində yeni nümunə yaradır. Bu, həddindən artıq yaddaş istehlakına və garbage collector-un əlavə işinə səbəb olur.
const olaraq elan edin, əgər bunu etməmək üçün səbəb yoxdursaKey istifadə edinTez-tez verilən suallar
StatelessWidget yaradıldıqdan sonra öz vəziyyətini dəyişə bilməz — yalnız konstruktor vasitəsilə ötürülən məlumatları göstərir. StatefulWidget setState vasitəsilə dəyişə bilən, həyat dövrü metodlarına malik və UI-ni asinxron olaraq yeniləməyə imkan verən ayrıca State obyekti yaradır.
Bəli, əgər valideyn vidjet yenidən qurulursa və yeni parametrlər ötürürsə. StatelessWidget öz-özünə yenilənmir, lakin valideyn tərəfindən yeni məlumatlarla yenidən yaradıla bilər. Flutter build-in yenidən çağırılmasının lazım olub-olmadığına qərar vermək üçün runtimeType və Key-i müqayisə edir.
const Flutter-ə vidjet nümunəsini compile-time-da yaratmağa və onu keşləməyə imkan verir. Əgər iki const vidjet eyni parametrlərə malikdirsə, Flutter bir elementi təkrar istifadə edir, build çağırışını tamamilə buraxır. Bu, siyahılarda və təkrarlanan strukturlarda performans qazancı verir.
Flutter parametrlər dəyişməsə belə, valideynin hər build-ində yeni nümunə yaradacaq. Bu, yaddaş alokatoru və garbage collector yükünü artırır, həmçinin uşaq vidjetlərin lazımsız yenidən qurulmasına səbəb ola bilər.
Heç bir məhdudiyyət yoxdur. Tipik Flutter tətbiqində StatelessWidget bütün vidjetlərin 50–80%-ni təşkil edir. StatelessWidget nə qədər çox olsa, performans bir o qədər proqnozlaşdırıla bilər və arxitektura daha sadə olar. Flutter bir ağacda minlərlə StatelessWidget ilə səmərəli işləmək üçün optimallaşdırılmışdır.
Nəticə
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.
Həm də oxuyun