Skip to content

Commit 76d6d36

Browse files
authored
Revert "FocusNode and FocusManager should dispatch creation in constructor." (#133474)
Reverts flutter/flutter#133352 Tree is failing on Mac and Linux customer_testing on this PR. https://ci.chromium.org/ui/p/flutter/builders/prod/Mac%20customer_testing/14646/overview https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20customer_testing/14974/overview
1 parent ec387a4 commit 76d6d36

4 files changed

Lines changed: 17 additions & 76 deletions

File tree

packages/flutter/lib/src/material/drawer.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,6 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
471471
void dispose() {
472472
_historyEntry?.remove();
473473
_controller.dispose();
474-
_focusScopeNode.dispose();
475474
super.dispose();
476475
}
477476

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,6 @@ class FocusNode with DiagnosticableTreeMixin, ChangeNotifier {
437437
_descendantsAreTraversable = descendantsAreTraversable {
438438
// Set it via the setter so that it does nothing on release builds.
439439
this.debugLabel = debugLabel;
440-
441-
if (kFlutterMemoryAllocationsEnabled) {
442-
maybeDispatchObjectCreation();
443-
}
444440
}
445441

446442
/// If true, tells the focus traversal policy to skip over this node for
@@ -1467,9 +1463,6 @@ class FocusManager with DiagnosticableTreeMixin, ChangeNotifier {
14671463
/// handlers, callers must call [registerGlobalHandlers]. See the
14681464
/// documentation in that method for caveats to watch out for.
14691465
FocusManager() {
1470-
if (kFlutterMemoryAllocationsEnabled) {
1471-
maybeDispatchObjectCreation();
1472-
}
14731466
rootScope._manager = this;
14741467
}
14751468

packages/flutter/test/widgets/focus_manager_test.dart

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1609,41 +1609,6 @@ void main() {
16091609
tester.binding.focusManager.removeListener(handleFocusChange);
16101610
});
16111611

1612-
test('$FocusManager dispatches object creation in constructor', () {
1613-
final List<ObjectEvent> events = <ObjectEvent>[];
1614-
void listener(ObjectEvent event) {
1615-
if (event.object.runtimeType == FocusManager) {
1616-
events.add(event);
1617-
}
1618-
}
1619-
MemoryAllocations.instance.addListener(listener);
1620-
1621-
final FocusManager focusManager = FocusManager();
1622-
1623-
expect(events, hasLength(1));
1624-
1625-
focusManager.dispose();
1626-
1627-
MemoryAllocations.instance.removeListener(listener);
1628-
});
1629-
1630-
test('$FocusNode dispatches object creation in constructor', () {
1631-
final List<ObjectEvent> events = <ObjectEvent>[];
1632-
void listener(ObjectEvent event) {
1633-
if (event.object.runtimeType == FocusNode) {
1634-
events.add(event);
1635-
}
1636-
}
1637-
MemoryAllocations.instance.addListener(listener);
1638-
1639-
final FocusNode focusManager = FocusNode();
1640-
1641-
expect(events, hasLength(1));
1642-
1643-
focusManager.dispose();
1644-
MemoryAllocations.instance.removeListener(listener);
1645-
});
1646-
16471612
testWidgets('FocusManager notifies listeners when a widget loses focus because it was removed.', (WidgetTester tester) async {
16481613
final FocusNode nodeA = FocusNode(debugLabel: 'a');
16491614
final FocusNode nodeB = FocusNode(debugLabel: 'b');

packages/flutter/test/widgets/memory_allocations_test.dart

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,20 @@ import 'package:flutter/foundation.dart';
66
import 'package:flutter/widgets.dart';
77
import 'package:flutter_test/flutter_test.dart';
88

9-
int _creations = 0;
10-
int _disposals = 0;
11-
129
void main() {
1310
final MemoryAllocations ma = MemoryAllocations.instance;
1411

12+
setUp(() {
13+
assert(!ma.hasListeners);
14+
});
15+
1516
test('Publishers dispatch events in debug mode', () async {
16-
void listener(ObjectEvent event) {
17-
if (event is ObjectDisposed) {
18-
_disposals++;
19-
}
20-
if (event is ObjectCreated) {
21-
_creations++;
22-
}
23-
}
17+
int eventCount = 0;
18+
void listener(ObjectEvent event) => eventCount++;
2419
ma.addListener(listener);
2520

26-
final _EventStats actual = await _activateFlutterObjectsAndReturnCountOfEvents();
27-
expect(actual.creations, _creations);
28-
expect(actual.disposals, _disposals);
21+
final int expectedEventCount = await _activateFlutterObjectsAndReturnCountOfEvents();
22+
expect(eventCount, expectedEventCount);
2923

3024
ma.removeListener(listener);
3125
expect(ma.hasListeners, isFalse);
@@ -35,8 +29,6 @@ void main() {
3529
bool stateCreated = false;
3630
bool stateDisposed = false;
3731

38-
expect(ma.hasListeners, false);
39-
4032
void listener(ObjectEvent event) {
4133
if (event is ObjectCreated && event.object is State) {
4234
stateCreated = true;
@@ -55,7 +47,7 @@ void main() {
5547
expect(stateCreated, isTrue);
5648
expect(stateDisposed, isTrue);
5749
ma.removeListener(listener);
58-
expect(ma.hasListeners, false);
50+
expect(ma.hasListeners, isFalse);
5951
});
6052
}
6153

@@ -70,8 +62,7 @@ class _TestElement extends RenderObjectElement with RootElementMixin {
7062
_TestElement(): super(_TestLeafRenderObjectWidget());
7163

7264
void makeInactive() {
73-
final FocusManager newFocusManager = FocusManager();
74-
assignOwner(BuildOwner(focusManager: newFocusManager));
65+
assignOwner(BuildOwner(focusManager: FocusManager()));
7566
mount(null, null);
7667
deactivate();
7768
}
@@ -118,22 +109,15 @@ class _TestStatefulWidgetState extends State<_TestStatefulWidget> {
118109
}
119110
}
120111

121-
122-
class _EventStats {
123-
int creations = 0;
124-
int disposals = 0;
125-
}
126-
127112
/// Create and dispose Flutter objects to fire memory allocation events.
128-
Future<_EventStats> _activateFlutterObjectsAndReturnCountOfEvents() async {
129-
final _EventStats result = _EventStats();
113+
Future<int> _activateFlutterObjectsAndReturnCountOfEvents() async {
114+
int count = 0;
130115

131-
final _TestElement element = _TestElement(); result.creations++;
132-
final RenderObject renderObject = _TestRenderObject(); result.creations++;
116+
final _TestElement element = _TestElement(); count++;
117+
final RenderObject renderObject = _TestRenderObject(); count++;
133118

134-
element.makeInactive(); result.creations += 3; // 1 for the new BuildOwner, 1 for the new FocusManager, 1 for the new FocusScopeNode
135-
element.unmount(); result.disposals += 2; // 1 for the old BuildOwner, 1 for the element
136-
renderObject.dispose(); result.disposals += 1;
119+
element.makeInactive(); element.unmount(); count += 3;
120+
renderObject.dispose(); count++;
137121

138-
return result;
122+
return count;
139123
}

0 commit comments

Comments
 (0)