【问题标题】:How to change DataTable's column width in Flutter?如何在 Flutter 中更改 DataTable 的列宽?
【发布时间】:2025-12-10 10:15:01
【问题描述】:

我的 Flutter 应用中有一个 DataTable。问题是填充数据时,列的宽度是自动设置的,而且太大了。如何手动设置列宽?我试图改变“Widget build”中的宽度参数,但它改变了整个表格的宽度,而不是所需的列。

【问题讨论】:

  • DataTable 中的每一列都是一个小部件,因此您可以使用 Container 包装您的列并以这种方式设置宽度。
  • 我可以在 Widget 构建方法中包装 DataTable,但我不能在 DataTable 方法中包装所需的列。
  • 在下面查看我的答案

标签: flutter


【解决方案1】:

@Smith,你的意思是你不能这样做?如果你能分享一些代码......

Widget build(BuildContext context) {
    return Scaffold(
      body: DataTable(
        columns: [DataColumn(label: Text('label'))],
        rows: [
          DataRow(cells: [DataCell(
            Container(
              width: 200, //SET width
              child: Text('text')))
              ])
        ]
      ),
    );

【讨论】:

  • 我添加了一些代码,在wiget build中我只有DataTable child:_databody()。填表方法_databody()
  • 好的,我发现我的错误,我忘了在文本中添加“孩子”。
【解决方案2】:

columnSpacing 属性添加到DataTable。默认设置为 56.0。

 columnSpacing: 30.0

【讨论】:

    【解决方案3】:

    在数据包中使用 columnSpacing 然后设置 1 这需要列文本的长度

    columnSpacing: 0, 
    

    【讨论】:

      【解决方案4】:

      比根据接受的答案使用Container 更好,使用ConstrainedBox 以便单元格大小只有在内容等于或超过限制宽度时才会增加。

      import 'package:flutter/material.dart';
      
      void main() async {
        runApp(
          MaterialApp(
            home: Scaffold(
              body: Card(
                child: DataTable(columns: [
                  DataColumn(
                      label: Text(
                    'short text column'.toUpperCase(),
                    style: TextStyle(fontWeight: FontWeight.bold),
                  )),
                  DataColumn(
                      label: Text(
                    'long text column'.toUpperCase(),
                    style: TextStyle(fontWeight: FontWeight.bold),
                  )),
                ], rows: [
                  DataRow(cells: [
                    DataCell(Text('short text')),
                    DataCell(ConstrainedBox(
                        constraints: BoxConstraints(maxWidth: 250), //SET max width
                        child: Text('very long text blah blah blah blah blah blah',
                            overflow: TextOverflow.ellipsis))),
                  ]),
                  DataRow(cells: [
                    DataCell(Text('short text')),
                    DataCell(ConstrainedBox(
                        constraints: BoxConstraints(maxWidth: 250), //SET max width
                        child: Text('very long text blah blah blah blah blah blah',
                            overflow: TextOverflow.ellipsis))),
                  ])
                ]),
              ),
            ),
          ),
        );
      }
      

      查看Dartpad example

      【讨论】: