import 'dart:collection'; class _ListenerEntry extends LinkedListEntry<_ListenerEntry> { _ListenerEntry(this.listener); final void Function() listener; } class ChangeNotifier { LinkedList<_ListenerEntry> _listeners = LinkedList<_ListenerEntry>(); bool get hasListeners { return _listeners.isNotEmpty; } void addListener(void Function() listener) { _listeners.add(_ListenerEntry(listener)); } @override void removeListener(void Function() listener) { for (final _ListenerEntry entry in _listeners) { if (entry.listener == listener) { entry.unlink(); return; } } } void dispose() { _listeners = null; } void notifyListeners() { if (_listeners.isEmpty) return; final List<_ListenerEntry> listeners = _listeners.toList(); for (final _ListenerEntry entry in listeners) { try { if (entry.list != null) entry.listener(); } catch (exception, stack) { print('error'); } } } }