rebuild method
Rebuilds the element.
Implementation
@override
void rebuild() {
final table = widget as Table;
// Reconcile cell elements list
while (cellElements.length < table.rows.length) {
cellElements.add(
List.filled(table.headers.length, null, growable: false),
);
}
while (cellElements.length > table.rows.length) {
final removed = cellElements.removeLast();
for (final el in removed) {
el?.unmount();
}
}
for (var r = 0; r < table.rows.length; r++) {
final rowData = table.rows[r];
if (cellElements[r].length != table.headers.length) {
for (final el in cellElements[r]) {
el?.unmount();
}
cellElements[r] = List.filled(
table.headers.length,
null,
growable: false,
);
}
for (var c = 0; c < table.headers.length; c++) {
final cellData = c < rowData.length ? rowData[c] : '';
if (cellData is Widget) {
Element? cellEl = cellElements[r][c];
if (cellEl != null &&
cellEl.widget.runtimeType == cellData.runtimeType) {
cellEl.update(cellData);
} else {
cellEl?.unmount();
cellEl = cellData.createElement();
cellEl.mount(this);
cellElements[r][c] = cellEl;
}
} else {
cellElements[r][c]?.unmount();
cellElements[r][c] = null;
}
}
}
}