Unverified Commit d27a9427 authored by Michael Goderbauer's avatar Michael Goderbauer Committed by GitHub

Do not crash if table children are replaced before they are layed out (#82765)

parent e716ac19
......@@ -392,8 +392,7 @@ class _TableElement extends RenderObjectElement {
@override
void removeRenderObjectChild(RenderBox child, _TableSlot slot) {
final TableCellParentData childParentData = child.parentData! as TableCellParentData;
renderObject.setChild(childParentData.x!, childParentData.y!, null);
renderObject.setChild(slot.column, slot.row, null);
}
final Set<Element> _forgottenChildren = HashSet<Element>();
......
......@@ -1000,5 +1000,38 @@ void main() {
expect(table.column(2).last.runtimeType, isNot(toBeReplaced));
});
testWidgets('Do not crash if a child that has not been layed out in a previous build is removed', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/60488.
Widget buildTable(Key key) {
return Directionality(
textDirection: TextDirection.ltr,
child: Table(
children: <TableRow>[
TableRow(
children: <Widget>[
KeyedSubtree(
key: key,
child: const Text('Hello'),
),
],
),
],
),
);
}
await tester.pumpWidget(
buildTable(const ValueKey<int>(1)),
null, EnginePhase.build, // Children are not layed out!
);
await tester.pumpWidget(
buildTable(const ValueKey<int>(2)),
);
expect(tester.takeException(), isNull);
expect(find.text('Hello'), findsOneWidget);
});
// TODO(ianh): Test handling of TableCell object
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment