flutter - 在 Flutter 中让 Container 填充 TableCell

标签 flutter flutter-layout

我正在尝试制作一个包含两个宽度和高度相同的单元格的表格,以便高度取决于内容的大小。然而,较小的 TableCell 总是缩小:

This is what I have now

这就是我要实现的:

This is what I'm trying to implement

代码如下:

  Table(
    children: [
      TableRow(
        children: [
          TableCell(
            child: Container(
              color: Colors.green,
              child: Text(
                  'long text long text long text long text long text long text long text'),
            ),
          ),
          TableCell(
            child: Container(
              color: Colors.orange,
              child: Text('short text'),
            ),
          ),
        ],
      )
    ],
  ),

附言我可以通过将 verticalAlignment: TableCellVerticalAlignment.fill, 添加到较小的单元格来解决它,但任何单元格都可以是较小的单元格,具体取决于内容。当我将此行添加到两个单元格时,整个表格都消失了。我能想到的唯一绕过方法是计算内容的长度并找到较小的单元格,但我想知道是否有一种方法可以直接用 Flutter 实现这个 UI。

非常感谢任何帮助。

最佳答案

1。 RowIntrinsicHeight

IntrinsicHeightRow 的高度限制为内容大小,但这被认为是一种“相对昂贵”的方法并且是 not recommended .

  IntrinsicHeight(
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        Expanded(
            child: Container(
                color: Colors.green,
                child: Text(
                  'long text long text long text long text long text',
                ))),
        Expanded(
            child: Container(
                color: Colors.orange,
                child: Text(
                  'short text',
                ))),
      ],
    ),
  ),

2。 TableTableCellVerticalAlignment.fill

如问题中所述,.fill 选项不得用于最大的 TableCell,因为在这种情况下,TableRow 将有zero height .这是首选解决方案,因为它没有前一个方案的“昂贵”问题。

final texts = ['long text long text long text long text long text', 'short text'];
final colors = [Colors.green, Colors.orange];
// find the longest text and its index
final max = texts.asMap().entries.reduce(
      (a, b) => (a.value.length > b.value.length) ? a : b,
    );
return Table(children: [
  TableRow(
    children: texts
        .asMap()
        .entries
        .map((e) => TableCell(
            // use .fill in all cells except the largest
            verticalAlignment: (e.key != max.key)
                ? TableCellVerticalAlignment.fill
                : TableCellVerticalAlignment.top,
            child: Container(
              color: colors[e.key],
              child: Text(e.value),
            )))
        .toList(),
  ),
]);

关于flutter - 在 Flutter 中让 Container 填充 TableCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70775944/

相关文章:

dart - 使用键和值从 map 创建小部件列表

flutter - 相对定位小部件

image - Flutter image_picker 不保存原点名称

Flutter inappwebview 滚动在 NestedScrollView TabBarView 中不起作用

dart - 使用 Futures 的 Flutter Like 按钮功能

ios - Flutter 中的 Ios 上横幅消失 (Firebase_admob)

flutter - 在我的布局中显示分隔线时出现问题

Flutter DraggableScrollableSheet 在按下按钮时不显示

Flutter TextField 填充和边框颜色不会变为灰色

flutter - 无法使用对齐小部件和对齐属性对齐行的子项