Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
787 of 1024 menu
◀ ▶

Класс ChangeNotifier

Класс ChangeNotifier реализует Listenable. Подписку ведут через addListener, снятие через removeListener, рассылку через notifyListeners. Завершение в dispose.

Синтаксис

class Bag with ChangeNotifier { void touch() => notifyListeners(); }

Методы

Метод Описание
addListener Регистрирует функцию без аргументов. Давайте разберём вызов на примерах.
removeListener Удаляет ту же функцию, что передали в addListener. Давайте разберём вызов на примерах.
notifyListeners Обходит список из addListener и вызывает каждый VoidCallback. Давайте разберём вызов на примерах.
dispose Снимает слушателей и помечает объект закрытым.

Пример

Давайте перестроим Text через ListenableBuilder:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: BagDemo(), ), ), ), ); } class TextBag extends ChangeNotifier { var line = 'abcde'; void swap() { line = line == 'abcde' ? '12345' : 'abcde'; notifyListeners(); } } class BagDemo extends StatefulWidget { const BagDemo({super.key}); @override State<BagDemo> createState() => _BagDemoState(); } class _BagDemoState extends State<BagDemo> { final bag = TextBag(); @override void dispose() { bag.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ ListenableBuilder( listenable: bag, builder: (context, child) => Text(bag.line), ), ElevatedButton( onPressed: bag.swap, child: const Text('go'), ), ], ); } }

На экране ChangeNotifier сменит подпись между двумя строками.

Пример

Давайте наследуем ValueNotifier от ChangeNotifier:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: ValueEcho(), ), ), ), ); } class ValueEcho extends StatelessWidget { const ValueEcho({super.key}); @override Widget build(BuildContext context) { final note = ValueNotifier<String>('abcde'); return ValueListenableBuilder<String>( valueListenable: note, builder: (context, value, child) { note.dispose(); return Text(value); }, ); } }

На экране ValueNotifier покажет 'abcde' как частный ChangeNotifier.

Смотрите также

  • класс ValueNotifier,
    который хранит одно value
  • виджет ListenableBuilder,
    который слушает ChangeNotifier
  • метод notifyListeners,
    который запускает перестройку слушателей
  • метод setState,
    который обновляет State без ChangeNotifier
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить