Listenable, ChangeNotifier, ValueNotifier
Listenable — Flutter-in observer interfeysidir: addListener və removeListener. Bütün state management library-lərinin "dəyişiklik xəbəri" hissəsi ya bu interfeysin, ya da Stream-in üzərində qurulur.
- `ChangeNotifier` —
Listenable-ın hazır implementasiyası. SiznotifyListeners()çağırırsınız, o da bütün dinləyiciləri xəbərdar edir. Nə dəyişdiyini bildirmir — sadəcə "nəsə dəyişdi" siqnalıdır. - `ValueNotifier<T>` — bir dəyər saxlayan
ChangeNotifier.valuesetter-i yeni dəyəri köhnəsi ilə==operatoru vasitəsilə müqayisə edir və yalnız fərq olduqda xəbər verir. - `ListenableBuilder` / `ValueListenableBuilder` — bu siqnalları UI-a bağlayan widget-lər: yalnız builder-in içindəki hissə rebuild olunur.
Rəsmi Flutter sənədi ValueNotifier + InheritedNotifier cütlüyünü ayrıca yanaşma kimi sadalayır: state-i yeniləmək və UI-a xəbər vermək üçün yalnız Flutter-in öz API-larından istifadə edən yanaşma.
class CounterView extends StatefulWidget {
const CounterView({super.key});
@override
State<CounterView> createState() => _CounterViewState();
}
class _CounterViewState extends State<CounterView> {
final _count = ValueNotifier<int>(0);
@override
void dispose() {
_count.dispose(); // notifier-i sökmək listener sızmasının qarşısını alır
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
const ExpensiveHeader(), // rebuild olunmur
ValueListenableBuilder<int>(
valueListenable: _count,
builder: (context, value, _) => Text('$value'),
),
ElevatedButton(
onPressed: () => _count.value++,
child: const Text('Artır'),
),
],
);
}
}Library olmadan lokal reaktivlik — `ValueListenableBuilder` yalnız `Text`-i yeniləyir.
Ən tez-tez rastlanan tələ: ValueNotifier<List<T>> içində siyahını add ilə dəyişmək. value eyni obyektə göndərmə olaraq qalır, == fərq görmür və heç bir bildiriş getmir. Həlli — hər dəfə yeni siyahı təyin etmək: notifier.value = [...notifier.value, item]. Bu, immutable state-in niyə vacib olduğunun ən kiçik və ən aydın nümunəsidir.
| Alət | Bildiriş dəqiqliyi | Nə vaxt kifayətdir |
|---|---|---|
| `setState` | Bütün `build` metodu yenidən işləyir | Kiçik widget, sadə ephemeral state |
| `ValueNotifier` + `ValueListenableBuilder` | Yalnız builder-in içi; `==` ilə süzgəc | Bir dəyər, ekran daxilində |
| `ChangeNotifier` + `ListenableBuilder` | "Nəsə dəyişdi" — hansı sahə olduğunu bilmirsiniz | Bir neçə sahəli model, orta mürəkkəblik |
| Provider / Riverpod / BLoC | Scope + seçmə (select) + ömür idarəsi | Ekranlar arası paylaşılan, async, test olunan state |
📚 Mənbələr və sənədlər
- ChangeNotifier APIrəsmiapi.flutter.dev
- ValueNotifier APIrəsmiapi.flutter.dev
== ilə müqayisə qaydası burada yazılıb — mutable siyahı tələsinin mənbəyi.
- ListenableBuilder APIrəsmiapi.flutter.dev
- Flutter: state management seçimlərirəsmidocs.flutter.dev
ValueNotifier + InheritedNotifier yanaşmasının rəsmi sadalanması.