Do not crash if table children are replaced before they are layed out (#82765)
This commit is contained in:
parent
e716ac19e8
commit
d27a942730
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user