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
- BuildContext classrəsmiapi.flutter.dev
- InheritedWidget classrəsmiapi.flutter.dev
`updateShouldNotify` metodunun rolu — rebuild-in nə vaxt tetiklendiyi burada yazılıb.
- Sadə app state idarəsirəsmidocs.flutter.dev