From c6d6fa9a86963476fccc7b8a838d364e68bdd323 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Fri, 29 Jan 2021 18:00:38 +0100 Subject: [PATCH] Use intrinsic with for columns with otherwise undefined size This fixes #491 specifically, and also updates flutter_layout_grid to a much improved version --- lib/src/layout_element.dart | 74 ++++++++++++++++++++----------------- pubspec.yaml | 2 +- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/lib/src/layout_element.dart b/lib/src/layout_element.dart index 95287b8e8c..cbb57f880e 100644 --- a/lib/src/layout_element.dart +++ b/lib/src/layout_element.dart @@ -31,6 +31,18 @@ class TableLayoutElement extends LayoutElement { @override Widget toWidget(RenderContext context) { + return Container( + decoration: BoxDecoration( + color: style.backgroundColor, + border: style.border, + ), + width: style.width, + height: style.height, + child: _layoutCells(context), + ); + } + + Widget _layoutCells(RenderContext context) { final rows = []; List columnSizes = []; for (var child in children) { @@ -48,14 +60,14 @@ class TableLayoutElement extends LayoutElement { colWidth.substring(0, colWidth.length - 1)); return percentageSize != null ? FlexibleTrackSize(percentageSize * 0.01) - : FlexibleTrackSize(1); + : IntrinsicContentTrackSize(); } else if (colWidth != null) { final fixedPxSize = double.tryParse(colWidth); return fixedPxSize != null ? FixedTrackSize(fixedPxSize) - : FlexibleTrackSize(1); + : IntrinsicContentTrackSize(); } else { - return FlexibleTrackSize(1); + return IntrinsicContentTrackSize(); } }); }) @@ -101,7 +113,8 @@ class TableLayoutElement extends LayoutElement { ), child: SizedBox.expand( child: Container( - alignment: child.style.alignment ?? style.alignment ?? + alignment: child.style.alignment ?? + style.alignment ?? Alignment.centerLeft, child: StyledText( textSpan: context.parser.parseTree(context, child), @@ -123,29 +136,21 @@ class TableLayoutElement extends LayoutElement { } // Create column tracks (insofar there were no colgroups that already defined them) - List finalColumnSizes = (columnSizes ?? []).take( - columnMax).toList(); + List finalColumnSizes = + (columnSizes ?? []).take(columnMax).toList(); finalColumnSizes += List.generate( max(0, columnMax - finalColumnSizes.length), - (_) => FlexibleTrackSize(1)); - return Container( - decoration: BoxDecoration( - color: style.backgroundColor, - border: style.border, - ), - width: style.width, - height: style.height, - child: LayoutGrid( - gridFit: GridFit.loose, - templateColumnSizes: finalColumnSizes, - templateRowSizes: rowSizes, - children: cells, - ), + (_) => IntrinsicContentTrackSize()); + + return LayoutGrid( + gridFit: GridFit.loose, + templateColumnSizes: finalColumnSizes, + templateRowSizes: rowSizes, + children: cells, ); } } - class TableSectionLayoutElement extends LayoutElement { TableSectionLayoutElement({ String name, @@ -185,12 +190,12 @@ class TableCellElement extends StyledElement { Style style, dom.Element node, }) : super( - name: name, - elementId: elementId, - elementClasses: elementClasses, - children: children, - style: style, - node: node) { + name: name, + elementId: elementId, + elementClasses: elementClasses, + children: children, + style: style, + node: node) { colspan = _parseSpan(this, "colspan"); rowspan = _parseSpan(this, "rowspan"); } @@ -201,8 +206,9 @@ class TableCellElement extends StyledElement { } } -TableCellElement parseTableCellElement(dom.Element element, - List children, +TableCellElement parseTableCellElement( + dom.Element element, + List children, ) { final cell = TableCellElement( name: element.localName, @@ -228,8 +234,9 @@ class TableStyleElement extends StyledElement { }) : super(name: name, children: children, style: style, node: node); } -TableStyleElement parseTableDefinitionElement(dom.Element element, - List children, +TableStyleElement parseTableDefinitionElement( + dom.Element element, + List children, ) { switch (element.localName) { case "colgroup": @@ -244,8 +251,9 @@ TableStyleElement parseTableDefinitionElement(dom.Element element, } } -LayoutElement parseLayoutElement(dom.Element element, - List children, +LayoutElement parseLayoutElement( + dom.Element element, + List children, ) { switch (element.localName) { case "table": diff --git a/pubspec.yaml b/pubspec.yaml index 0a94a6b93d..87035f2013 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: css_colors: ^1.0.2 # Plugins for rendering the
tag. - flutter_layout_grid: ^0.10.2 + flutter_layout_grid: ^0.10.5 # Plugins for rendering the