Skip to content

Commit 6225bea

Browse files
authored
Can call ChangeNotifier.hasListeners after disposed (#108931)
1 parent c22b7f6 commit 6225bea

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

packages/flutter/lib/src/foundation/change_notifier.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,10 @@ class ChangeNotifier implements Listenable {
170170
/// [notifyListeners]; and similarly, by overriding [removeListener], checking
171171
/// if [hasListeners] is false after calling `super.removeListener()`, and if
172172
/// so, stopping that same work.
173+
///
174+
/// This method returns false if [dispose] has been called.
173175
@protected
174-
bool get hasListeners {
175-
assert(ChangeNotifier.debugAssertNotDisposed(this));
176-
return _count > 0;
177-
}
176+
bool get hasListeners => _count > 0;
178177

179178
/// Register a closure to be called when the object changes.
180179
///

packages/flutter/test/foundation/change_notifier_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,20 @@ void main() {
349349
expect(error, isNull);
350350
});
351351

352+
test('Can check hasListener on a disposed ChangeNotifier', () {
353+
final HasListenersTester<int> source = HasListenersTester<int>(0);
354+
source.addListener(() { });
355+
expect(source.testHasListeners, isTrue);
356+
FlutterError? error;
357+
try {
358+
source.dispose();
359+
expect(source.testHasListeners, isFalse);
360+
} on FlutterError catch (e) {
361+
error = e;
362+
}
363+
expect(error, isNull);
364+
});
365+
352366
test('Value notifier', () {
353367
final ValueNotifier<double> notifier = ValueNotifier<double>(2.0);
354368

0 commit comments

Comments
 (0)