buildTable method
- @override
- BuildMetadata node,
- TextStyleHtml tsh,
- 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))
],
);
}