From 6225bea261c5647477e76f19ca1f3741c548d56d Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Thu, 4 Aug 2022 10:21:06 -0700 Subject: [PATCH] Can call ChangeNotifier.hasListeners after disposed (#108931) --- .../lib/src/foundation/change_notifier.dart | 7 +++---- .../test/foundation/change_notifier_test.dart | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/flutter/lib/src/foundation/change_notifier.dart b/packages/flutter/lib/src/foundation/change_notifier.dart index f79fb7b2da6..71c7fc230b9 100644 --- a/packages/flutter/lib/src/foundation/change_notifier.dart +++ b/packages/flutter/lib/src/foundation/change_notifier.dart @@ -170,11 +170,10 @@ class ChangeNotifier implements Listenable { /// [notifyListeners]; and similarly, by overriding [removeListener], checking /// if [hasListeners] is false after calling `super.removeListener()`, and if /// so, stopping that same work. + /// + /// This method returns false if [dispose] has been called. @protected - bool get hasListeners { - assert(ChangeNotifier.debugAssertNotDisposed(this)); - return _count > 0; - } + bool get hasListeners => _count > 0; /// Register a closure to be called when the object changes. /// diff --git a/packages/flutter/test/foundation/change_notifier_test.dart b/packages/flutter/test/foundation/change_notifier_test.dart index cfdf4aa59f2..8ff4e29a89b 100644 --- a/packages/flutter/test/foundation/change_notifier_test.dart +++ b/packages/flutter/test/foundation/change_notifier_test.dart @@ -349,6 +349,20 @@ void main() { expect(error, isNull); }); + test('Can check hasListener on a disposed ChangeNotifier', () { + final HasListenersTester source = HasListenersTester(0); + source.addListener(() { }); + expect(source.testHasListeners, isTrue); + FlutterError? error; + try { + source.dispose(); + expect(source.testHasListeners, isFalse); + } on FlutterError catch (e) { + error = e; + } + expect(error, isNull); + }); + test('Value notifier', () { final ValueNotifier notifier = ValueNotifier(2.0);