diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index a8d7884a42..290fee49c3 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -129,11 +129,6 @@ class ObjectKey extends LocalKey { } } -/// Signature for a callback when a global key is removed from the tree. -/// -/// Used by [GlobalKey.registerRemoveListener]. -typedef void GlobalKeyRemoveListener(GlobalKey key); - /// A key that is unique across the entire app. /// /// Global keys uniquely identify elements. Global keys provide access to other @@ -168,7 +163,6 @@ abstract class GlobalKey> extends Key { const GlobalKey.constructor() : super._(); static final Map _registry = {}; - static final Map> _removeListeners = >{}; static final Set _removedKeys = new HashSet(); static final Set _debugIllFatedElements = new HashSet(); static final Map _debugReservations = {}; @@ -297,53 +291,6 @@ abstract class GlobalKey> extends Key { } return null; } - - /// Calls `listener` whenever a widget with the given global key is removed - /// from the tree. - /// - /// Listeners can be removed with [unregisterRemoveListener]. - static void registerRemoveListener(GlobalKey key, GlobalKeyRemoveListener listener) { - assert(key != null); - final Set listeners = - _removeListeners.putIfAbsent(key, () => new HashSet()); - final bool added = listeners.add(listener); - assert(added); - } - - /// Stop calling `listener` whenever a widget with the given global key is - /// removed from the tree. - /// - /// Listeners can be added with [registerRemoveListener]. - static void unregisterRemoveListener(GlobalKey key, GlobalKeyRemoveListener listener) { - assert(key != null); - assert(_removeListeners.containsKey(key)); - assert(_removeListeners[key].contains(listener)); - final bool removed = _removeListeners[key].remove(listener); - if (_removeListeners[key].isEmpty) - _removeListeners.remove(key); - assert(removed); - } - - static void _notifyListeners() { - if (_removedKeys.isEmpty) - return; - try { - for (GlobalKey key in _removedKeys) { - if (!_registry.containsKey(key) && _removeListeners.containsKey(key)) { - final Set localListeners = new HashSet.from(_removeListeners[key]); - for (GlobalKeyRemoveListener listener in localListeners) { - try { - listener(key); - } catch (e, stack) { - _debugReportException('while notifying GlobalKey listener', e, stack); - } - } - } - } - } finally { - _removedKeys.clear(); - } - } } /// A global key with a debugging label. @@ -2082,7 +2029,6 @@ class BuildOwner { } return true; }); - scheduleMicrotask(GlobalKey._notifyListeners); } catch (e, stack) { _debugReportException('while finalizing the widget tree', e, stack); } finally { diff --git a/packages/flutter/test/widgets/framework_test.dart b/packages/flutter/test/widgets/framework_test.dart index 3fa398049e..c851c6ecfb 100644 --- a/packages/flutter/test/widgets/framework_test.dart +++ b/packages/flutter/test/widgets/framework_test.dart @@ -403,28 +403,6 @@ void main() { expect(count, 2); }); - testWidgets('GlobalKey notification exception handling', (WidgetTester tester) async { - final GlobalKey key = new GlobalKey(); - - await tester.pumpWidget(new Container(key: key)); - - GlobalKey.registerRemoveListener(key, (GlobalKey key) { - throw new Exception('Misbehaving listener'); - }); - - bool didReceiveCallback = false; - GlobalKey.registerRemoveListener(key, (GlobalKey key) { - expect(didReceiveCallback, isFalse); - didReceiveCallback = true; - }); - - await tester.pumpWidget(new Placeholder()); - - expect(tester.takeException(), isNotNull); - expect(didReceiveCallback, isTrue); - }); - - testWidgets('Defunct setState throws exception', (WidgetTester tester) async { StateSetter setState;