buildTable method

  1. @override
Widget buildTable (
  1. BuildMetadata node,
  2. TextStyleHtml tsh,
  3. TableMetadata table
)

Builds LayoutGrid.

Implementation

@override
Widget buildTable(
    BuildMetadata node, TextStyleHtml tsh, TableMetadata table) {
  final cols = table.cols;
  if (cols == 0) return null;
  final templateColumnSizes = List<TrackSize>(cols);
  for (var c = 0; c < cols; c++) {
    templateColumnSizes[c] = FlexibleTrackSize(1);
  }

  final rows = table.rows;
  if (rows == 0) return null;
  final templateRowSizes = List<TrackSize>(rows);
  for (var r = 0; r < rows; r++) {
    templateRowSizes[r] = IntrinsicContentTrackSize();
  }

  final border = table.border != null
      ? BoxDecoration(border: Border.fromBorderSide(table.border))
      : null;

  final children = <Widget>[];
  table.visitCells((col, row, widget, colspan, rowspan) {
    Widget child = SizedBox.expand(child: widget);

    if (border != null) {
      child = Container(
        child: child,
        decoration: border,
      );
    }

    child = child.withGridPlacement(
      columnStart: col,
      columnSpan: colspan,
      rowStart: row,
      rowSpan: rowspan,
    );

    children.add(child);
  });

  final layoutGrid = LayoutGrid(
    children: children,
    columnGap: -(table.border?.width ?? 0),
    gridFit: GridFit.passthrough,
    rowGap: -(table.border?.width ?? 0),
    templateColumnSizes: templateColumnSizes,
    templateRowSizes: templateRowSizes,
  );

  if (border == null) return layoutGrid;

  return buildStack(
    node,
    tsh,
    <Widget>[
      layoutGrid,
      Positioned.fill(child: Container(decoration: border))
    ],
  );
}