Sparround

BuildContext və InheritedWidget

`BuildContext` widget-in element ağacındakı mövqeyidir — widget-in özü deyil. Ona görə context vasitəsilə "yuxarı baxmaq" mümkündür: Theme.of(context), Navigator.of(context), MediaQuery.of(context) hamısı eyni işi görür — ağacda yuxarı qalxıb müəyyən tipdə widget axtarır.

Bu axtarışın altında `InheritedWidget` dayanır. O, ağacın aşağısındakı widget-lərə data paylamaq üçün Flutter-in daxili mexanizmidir və iki şey verir:

  • O(1) çıxış — ağacda gəzmək yox, birbaşa tapmaq
  • Avtomatik abunə — data dəyişəndə ondan asılı widget-lər rebuild olur

Praktikada InheritedWidget-i əl ilə yazmaq nadir haldır — Provider, Riverpod və InheritedNotifier onun üzərində qurulub. Amma necə işlədiyini bilmək interview tələbidir, çünki bütün state management paketlərinin təməli budur.

Ən çox rast gəlinən praktik problem səhv context-dir: showDialog və ya Navigator.of(context) çağıranda verilən context ağacın lazım olan hissəsindən yuxarıda olsa, "No Navigator/Scaffold found" tipli xəta alınır. Həll adətən Builder widget-i ilə düzgün səviyyədə yeni context yaratmaqdır.

Interview ipucu. "Provider arxa planda necə işləyir?" sualının cavabı budur: InheritedWidget. Cavabda mexanizmi göstər — of(context) dependOnInheritedWidgetOfExactType çağırır, bu isə həm widget-i tapır, həm də cari elementi ondan asılı kimi qeyd edir; data dəyişəndə yalnız asılı elementlər rebuild olunur. Bu izah səni "paket istifadə edən" səviyyəsindən "nə etdiyini bilən" səviyyəsinə keçirir.

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