Skip to content

Commit 7f41ab2

Browse files
authored
Fix (insert|move|remove)RenderObjectChild methods in base class (#123276)
1 parent 3179875 commit 7f41ab2

File tree

6 files changed

+40
-95
lines changed

6 files changed

+40
-95
lines changed

packages/flutter/lib/src/cupertino/dialog.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,7 @@ class _CupertinoDialogRenderElement extends RenderObjectElement {
856856
@override
857857
void moveRenderObjectChild(RenderObject child, _AlertDialogSections oldSlot, _AlertDialogSections newSlot) {
858858
if (!allowMoveRenderObjectChild) {
859-
super.moveRenderObjectChild(child, oldSlot, newSlot);
859+
assert(false);
860860
return;
861861
}
862862

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

Lines changed: 3 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -6290,30 +6290,7 @@ abstract class RenderObjectElement extends Element {
62906290
/// [IndexedSlot] is a convenient value for the slot.
62916291
/// {@endtemplate}
62926292
@protected
6293-
void insertRenderObjectChild(covariant RenderObject child, covariant Object? slot) {
6294-
assert(() {
6295-
throw FlutterError.fromParts(<DiagnosticsNode>[
6296-
ErrorSummary('RenderObjectElement.insertChildRenderObject() is deprecated.'),
6297-
toDiagnosticsNode(
6298-
name: 'insertChildRenderObject() was called on this Element',
6299-
style: DiagnosticsTreeStyle.shallow,
6300-
),
6301-
ErrorDescription(
6302-
'insertChildRenderObject() has been deprecated in favor of '
6303-
'insertRenderObjectChild(). See https://github.com/flutter/flutter/issues/63269 '
6304-
'for details.',
6305-
),
6306-
ErrorHint(
6307-
'Rather than overriding insertChildRenderObject() in your '
6308-
'RenderObjectElement subclass, override insertRenderObjectChild() instead, '
6309-
"and DON'T call super.insertRenderObjectChild(). If you're implementing a "
6310-
'new RenderObjectElement, you should override/implement '
6311-
'insertRenderObjectChild(), moveRenderObjectChild(), and '
6312-
'removeRenderObjectChild().',
6313-
),
6314-
]);
6315-
}());
6316-
}
6293+
void insertRenderObjectChild(covariant RenderObject child, covariant Object? slot);
63176294

63186295
/// Move the given child from the given old slot to the given new slot.
63196296
///
@@ -6330,60 +6307,14 @@ abstract class RenderObjectElement extends Element {
63306307
/// compared against each other for the purposes of updating one slot with the
63316308
/// element from another slot) would never call this.
63326309
@protected
6333-
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot) {
6334-
assert(() {
6335-
throw FlutterError.fromParts(<DiagnosticsNode>[
6336-
ErrorSummary('RenderObjectElement.moveChildRenderObject() is deprecated.'),
6337-
toDiagnosticsNode(
6338-
name: 'super.moveChildRenderObject() was called on this Element',
6339-
style: DiagnosticsTreeStyle.shallow,
6340-
),
6341-
ErrorDescription(
6342-
'moveChildRenderObject() has been deprecated in favor of '
6343-
'moveRenderObjectChild(). See https://github.com/flutter/flutter/issues/63269 '
6344-
'for details.',
6345-
),
6346-
ErrorHint(
6347-
'Rather than overriding moveChildRenderObject() in your '
6348-
'RenderObjectElement subclass, override moveRenderObjectChild() instead, '
6349-
"and DON'T call super.moveRenderObjectChild(). If you're implementing a "
6350-
'new RenderObjectElement, you should override/implement '
6351-
'insertRenderObjectChild(), moveRenderObjectChild(), and '
6352-
'removeRenderObjectChild().',
6353-
),
6354-
]);
6355-
}());
6356-
}
6310+
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot);
63576311

63586312
/// Remove the given child from [renderObject].
63596313
///
63606314
/// The given child is guaranteed to have been inserted at the given `slot`
63616315
/// and have [renderObject] as its parent.
63626316
@protected
6363-
void removeRenderObjectChild(covariant RenderObject child, covariant Object? slot) {
6364-
assert(() {
6365-
throw FlutterError.fromParts(<DiagnosticsNode>[
6366-
ErrorSummary('RenderObjectElement.removeChildRenderObject() is deprecated.'),
6367-
toDiagnosticsNode(
6368-
name: 'super.removeChildRenderObject() was called on this Element',
6369-
style: DiagnosticsTreeStyle.shallow,
6370-
),
6371-
ErrorDescription(
6372-
'removeChildRenderObject() has been deprecated in favor of '
6373-
'removeRenderObjectChild(). See https://github.com/flutter/flutter/issues/63269 '
6374-
'for details.',
6375-
),
6376-
ErrorHint(
6377-
'Rather than overriding removeChildRenderObject() in your '
6378-
'RenderObjectElement subclass, override removeRenderObjectChild() instead, '
6379-
"and DON'T call super.removeRenderObjectChild(). If you're implementing a "
6380-
'new RenderObjectElement, you should override/implement '
6381-
'insertRenderObjectChild(), moveRenderObjectChild(), and '
6382-
'removeRenderObjectChild().',
6383-
),
6384-
]);
6385-
}());
6386-
}
6317+
void removeRenderObjectChild(covariant RenderObject child, covariant Object? slot);
63876318

63886319
@override
63896320
void debugFillProperties(DiagnosticPropertiesBuilder properties) {

packages/flutter/test/widgets/framework_test.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2119,6 +2119,15 @@ class FakeLeafRenderObject extends RenderBox {
21192119

21202120
class TestRenderObjectElement extends RenderObjectElement {
21212121
TestRenderObjectElement() : super(Table());
2122+
2123+
@override
2124+
void insertRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
2125+
2126+
@override
2127+
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot) { }
2128+
2129+
@override
2130+
void removeRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
21222131
}
21232132

21242133
class _EmptyWidget extends Widget {

packages/flutter/test/widgets/memory_allocations_test.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ class _TestElement extends RootRenderObjectElement{
6666
mount(null, null);
6767
deactivate();
6868
}
69+
70+
@override
71+
void insertRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
72+
73+
@override
74+
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot) { }
75+
76+
@override
77+
void removeRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
6978
}
7079

7180
class _TestRenderObject extends RenderObject {

packages/flutter/test/widgets/render_object_element_test.dart

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,15 @@ abstract class SwapperElement extends RenderObjectElement {
105105
swapper = updateChild(swapper, widget.swapper, swapperIsOnTop);
106106
swapperIsOnTop = !swapperIsOnTop;
107107
}
108+
109+
@override
110+
void insertRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
111+
112+
@override
113+
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot) { }
114+
115+
@override
116+
void removeRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
108117
}
109118

110119
class SwapperElementWithProperOverrides extends SwapperElement {
@@ -288,26 +297,4 @@ void main() {
288297
expect(swapper.removeSlots, contains('stable'));
289298
expect(swapper.removeSlots, contains(false));
290299
});
291-
292-
testWidgets('RenderObjectElement *ChildRenderObject methods fail with deprecation message', (WidgetTester tester) async {
293-
const Key redKey = ValueKey<String>('red');
294-
const Key blueKey = ValueKey<String>('blue');
295-
Widget widget() {
296-
return SwapperWithNoOverrides(
297-
stable: ColoredBox(
298-
key: redKey,
299-
color: Color(nonconst(0xffff0000)),
300-
),
301-
swapper: ColoredBox(
302-
key: blueKey,
303-
color: Color(nonconst(0xff0000ff)),
304-
),
305-
);
306-
}
307-
308-
await tester.pumpWidget(widget());
309-
final FlutterError error = tester.takeException() as FlutterError;
310-
final ErrorSummary summary = error.diagnostics.first as ErrorSummary;
311-
expect(summary.toString(), contains('deprecated'));
312-
});
313300
}

packages/flutter/test_release/widgets/memory_allocations_test.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,15 @@ class _TestElement extends RootRenderObjectElement{
6363
mount(null, null);
6464
deactivate();
6565
}
66+
67+
@override
68+
void insertRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
69+
70+
@override
71+
void moveRenderObjectChild(covariant RenderObject child, covariant Object? oldSlot, covariant Object? newSlot) { }
72+
73+
@override
74+
void removeRenderObjectChild(covariant RenderObject child, covariant Object? slot) { }
6675
}
6776

6877
class _MyStatefulWidget extends StatefulWidget {

0 commit comments

Comments
 (0)