Skip to content

Commit b564b4c

Browse files
authored
Remove GlobalKey removal listeners (flutter#9143)
These where used only by the old focus system. Let's remove them before they grow more clients.
1 parent d88ff90 commit b564b4c

File tree

2 files changed

+0
-76
lines changed

2 files changed

+0
-76
lines changed

packages/flutter/lib/src/widgets/framework.dart

-54
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,6 @@ class ObjectKey extends LocalKey {
129129
}
130130
}
131131

132-
/// Signature for a callback when a global key is removed from the tree.
133-
///
134-
/// Used by [GlobalKey.registerRemoveListener].
135-
typedef void GlobalKeyRemoveListener(GlobalKey key);
136-
137132
/// A key that is unique across the entire app.
138133
///
139134
/// Global keys uniquely identify elements. Global keys provide access to other
@@ -168,7 +163,6 @@ abstract class GlobalKey<T extends State<StatefulWidget>> extends Key {
168163
const GlobalKey.constructor() : super._();
169164

170165
static final Map<GlobalKey, Element> _registry = <GlobalKey, Element>{};
171-
static final Map<GlobalKey, Set<GlobalKeyRemoveListener>> _removeListeners = <GlobalKey, Set<GlobalKeyRemoveListener>>{};
172166
static final Set<GlobalKey> _removedKeys = new HashSet<GlobalKey>();
173167
static final Set<Element> _debugIllFatedElements = new HashSet<Element>();
174168
static final Map<GlobalKey, Element> _debugReservations = <GlobalKey, Element>{};
@@ -297,53 +291,6 @@ abstract class GlobalKey<T extends State<StatefulWidget>> extends Key {
297291
}
298292
return null;
299293
}
300-
301-
/// Calls `listener` whenever a widget with the given global key is removed
302-
/// from the tree.
303-
///
304-
/// Listeners can be removed with [unregisterRemoveListener].
305-
static void registerRemoveListener(GlobalKey key, GlobalKeyRemoveListener listener) {
306-
assert(key != null);
307-
final Set<GlobalKeyRemoveListener> listeners =
308-
_removeListeners.putIfAbsent(key, () => new HashSet<GlobalKeyRemoveListener>());
309-
final bool added = listeners.add(listener);
310-
assert(added);
311-
}
312-
313-
/// Stop calling `listener` whenever a widget with the given global key is
314-
/// removed from the tree.
315-
///
316-
/// Listeners can be added with [registerRemoveListener].
317-
static void unregisterRemoveListener(GlobalKey key, GlobalKeyRemoveListener listener) {
318-
assert(key != null);
319-
assert(_removeListeners.containsKey(key));
320-
assert(_removeListeners[key].contains(listener));
321-
final bool removed = _removeListeners[key].remove(listener);
322-
if (_removeListeners[key].isEmpty)
323-
_removeListeners.remove(key);
324-
assert(removed);
325-
}
326-
327-
static void _notifyListeners() {
328-
if (_removedKeys.isEmpty)
329-
return;
330-
try {
331-
for (GlobalKey key in _removedKeys) {
332-
if (!_registry.containsKey(key) && _removeListeners.containsKey(key)) {
333-
final Set<GlobalKeyRemoveListener> localListeners = new HashSet<GlobalKeyRemoveListener>.from(_removeListeners[key]);
334-
for (GlobalKeyRemoveListener listener in localListeners) {
335-
try {
336-
listener(key);
337-
} catch (e, stack) {
338-
_debugReportException('while notifying GlobalKey listener', e, stack);
339-
}
340-
}
341-
}
342-
}
343-
} finally {
344-
_removedKeys.clear();
345-
}
346-
}
347294
}
348295

349296
/// A global key with a debugging label.
@@ -2082,7 +2029,6 @@ class BuildOwner {
20822029
}
20832030
return true;
20842031
});
2085-
scheduleMicrotask(GlobalKey._notifyListeners);
20862032
} catch (e, stack) {
20872033
_debugReportException('while finalizing the widget tree', e, stack);
20882034
} finally {

packages/flutter/test/widgets/framework_test.dart

-22
Original file line numberDiff line numberDiff line change
@@ -403,28 +403,6 @@ void main() {
403403
expect(count, 2);
404404
});
405405

406-
testWidgets('GlobalKey notification exception handling', (WidgetTester tester) async {
407-
final GlobalKey key = new GlobalKey();
408-
409-
await tester.pumpWidget(new Container(key: key));
410-
411-
GlobalKey.registerRemoveListener(key, (GlobalKey key) {
412-
throw new Exception('Misbehaving listener');
413-
});
414-
415-
bool didReceiveCallback = false;
416-
GlobalKey.registerRemoveListener(key, (GlobalKey key) {
417-
expect(didReceiveCallback, isFalse);
418-
didReceiveCallback = true;
419-
});
420-
421-
await tester.pumpWidget(new Placeholder());
422-
423-
expect(tester.takeException(), isNotNull);
424-
expect(didReceiveCallback, isTrue);
425-
});
426-
427-
428406
testWidgets('Defunct setState throws exception', (WidgetTester tester) async {
429407
StateSetter setState;
430408

0 commit comments

Comments
 (0)