From dacab7de3a1b81d263aee87a2529a9db0d5e2da2 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 26 Apr 2022 13:29:08 -0700 Subject: [PATCH] Improve efficiency of copying the animation ObserverList in notifyListeners (#102536) --- packages/flutter/lib/src/animation/listener_helpers.dart | 4 ++-- packages/flutter/lib/src/foundation/observer_list.dart | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/animation/listener_helpers.dart b/packages/flutter/lib/src/animation/listener_helpers.dart index ebf2943bd9..55cbd048e4 100644 --- a/packages/flutter/lib/src/animation/listener_helpers.dart +++ b/packages/flutter/lib/src/animation/listener_helpers.dart @@ -137,7 +137,7 @@ mixin AnimationLocalListenersMixin { @protected @pragma('vm:notify-debugger-on-exception') void notifyListeners() { - final List localListeners = List.of(_listeners); + final List localListeners = _listeners.toList(growable: false); for (final VoidCallback listener in localListeners) { InformationCollector? collector; assert(() { @@ -226,7 +226,7 @@ mixin AnimationLocalStatusListenersMixin { @protected @pragma('vm:notify-debugger-on-exception') void notifyStatusListeners(AnimationStatus status) { - final List localListeners = List.of(_statusListeners); + final List localListeners = _statusListeners.toList(growable: false); for (final AnimationStatusListener listener in localListeners) { try { if (_statusListeners.contains(listener)) diff --git a/packages/flutter/lib/src/foundation/observer_list.dart b/packages/flutter/lib/src/foundation/observer_list.dart index c4683a09ed..22c2389ceb 100644 --- a/packages/flutter/lib/src/foundation/observer_list.dart +++ b/packages/flutter/lib/src/foundation/observer_list.dart @@ -76,6 +76,11 @@ class ObserverList extends Iterable { @override bool get isNotEmpty => _list.isNotEmpty; + + @override + List toList({bool growable = true}) { + return _list.toList(growable: growable); + } } /// A list optimized for the observer pattern, but for larger numbers of observers.