Skip to content

Commit dacab7d

Browse files
Improve efficiency of copying the animation ObserverList in notifyListeners (#102536)
1 parent 79d4bdd commit dacab7d

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

packages/flutter/lib/src/animation/listener_helpers.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ mixin AnimationLocalListenersMixin {
137137
@protected
138138
@pragma('vm:notify-debugger-on-exception')
139139
void notifyListeners() {
140-
final List<VoidCallback> localListeners = List<VoidCallback>.of(_listeners);
140+
final List<VoidCallback> localListeners = _listeners.toList(growable: false);
141141
for (final VoidCallback listener in localListeners) {
142142
InformationCollector? collector;
143143
assert(() {
@@ -226,7 +226,7 @@ mixin AnimationLocalStatusListenersMixin {
226226
@protected
227227
@pragma('vm:notify-debugger-on-exception')
228228
void notifyStatusListeners(AnimationStatus status) {
229-
final List<AnimationStatusListener> localListeners = List<AnimationStatusListener>.of(_statusListeners);
229+
final List<AnimationStatusListener> localListeners = _statusListeners.toList(growable: false);
230230
for (final AnimationStatusListener listener in localListeners) {
231231
try {
232232
if (_statusListeners.contains(listener))

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ class ObserverList<T> extends Iterable<T> {
7676

7777
@override
7878
bool get isNotEmpty => _list.isNotEmpty;
79+
80+
@override
81+
List<T> toList({bool growable = true}) {
82+
return _list.toList(growable: growable);
83+
}
7984
}
8085

8186
/// A list optimized for the observer pattern, but for larger numbers of observers.

0 commit comments

Comments
 (0)