Sparround

setState və StatefulWidget lifecycle

setState sehr deyil — o, sadəcə iki şey edir: callback-i sinxron işlədir və elementi "dirty" kimi işarələyir. Rebuild isə növbəti frame-də baş verir.

Bundan iki nəticə çıxır:

  • setState içindəki kod dərhal icra olunur, ona görə orada await etmək mənasızdır — dəyişikliyi əvvəl et, sonra setState çağır
  • setState-siz sahəni dəyişsən dəyər dəyişir, amma UI yenilənmir; ekran nə vaxtsa başqa səbəbdən rebuild olanda dəyişiklik "birdən" görünür
MetodNə vaxt çağırılırNə üçün istifadə olunur
`initState`State yaradılanda bir dəfəController yaratmaq, subscription açmaq, ilk data yükləmək
`didChangeDependencies``initState`-dən sonra və asılı olduğu InheritedWidget dəyişəndə`Theme.of`/`MediaQuery.of`-dan asılı işlər
`didUpdateWidget`Valideyn eyni tipdə yeni widget verəndəKöhnə və yeni `widget` parametrlərini müqayisə edib reaksiya vermək
`dispose`State ağacdan həmişəlik çıxarılandaController bağlamaq, subscription ləğv etmək

Interview ipucu. initState-də context-dən istifadə etmək klassik tələdir: Theme.of(context) və ya MediaQuery.of(context) orada hələ etibarlı deyil — bunun üçün didChangeDependencies var. Digər tez-tez soruşulan nüans: initState-də async iş başlatmaq olar, amma initState-in özünü async etmək olmaz; işi ayrıca metoda çıxarıb çağırmaq lazımdır.

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