rebuild method

  1. @override
void rebuild()
override

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;
      }
    }
  }
}