Sparround

Widget tree: Stateless və Stateful

Flutter-də hər şey widget-dir: düymə də, padding də, bütöv ekran da. Widget-lər ağac (tree) şəklində yerləşir və hər biri immutable konfiqurasiyadır — yəni widget obyektinin özü dəyişmir, yenisi yaradılır.

İki əsas növ var:

  • StatelessWidget — daxili vəziyyəti yoxdur; eyni girişlə həmişə eyni nəticəni verir
  • StatefulWidget — dəyişən vəziyyəti var; vəziyyət ayrıca State obyektində yaşayır

Bu ayrılığın səbəbi budur: widget hər rebuild-də yenidən yaradılır, amma State obyekti yaşamağa davam edir. Ona görə TextEditingController, animasiya controller-i və s. State-də saxlanılır, widget-in özündə yox.

Flutter əslində üç ağac saxlayır və interview-də bu fərq soruşulur:

  • Widget tree — sənin yazdığın konfiqurasiya; ucuzdur, tez-tez yenidən yaradılır
  • Element tree — widget-lərin "canlı" nüsxələri; ağacın vəziyyətini və mövqeyini saxlayır
  • Render tree — ölçmə və çəkmə ilə məşğul olan qat

Rebuild zamanı Flutter yeni widget ağacını köhnəsi ilə müqayisə edir və yalnız fərqi element/render ağacına tətbiq edir. Buna görə build() metodunun tez-tez çağırılması özlüyündə problem deyil — problem build() içində ağır iş görməkdir.

SualStatelessWidgetStatefulWidget
Daxili dəyişən vəziyyətyoxdurvar, `State` obyektində
Nə vaxt rebuild olurvalideyn onu yenidən qurduqdahəmçinin `setState` çağırıldıqda
Tipik istifadəikon, etiket, statik kartforma, sayğac, animasiya
Yaddaş və disposelazım deyil`dispose()`-da təmizlənməlidir

Interview ipucu. "Stateless və Stateful fərqi nədir?" sualına yalnız tərif vermək junior cavabıdır. Güclü cavab niyəsini əlavə edir: widget immutable-dır, ona görə dəyişən vəziyyət ayrıca State obyektində saxlanılır və rebuild-dən sağ çıxır. Sonda praktik nəticəni de: "ona görə controller-ləri `State`-də yaradıram və `dispose()`-da bağlayıram". Bir addım da irəli getmək istəyirsənsə, üç ağacdan danış — namizədlərin əksəriyyəti bunu bilmir.

📚 Mənbələr və sənədlər