You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter DataTable如何根据整数输入动态生成对应数量的DataRow

Flutter DataTable 动态生成行优化方案

你可以按照下面的步骤修改代码,替换原有硬编码的50行逻辑即可实现需求:

  • 先在State类中定义必要的状态变量
// 存储用户输入的行数,默认设为1避免初始页面空白
int _rowCount = 1;
// 文本框控制器
final TextEditingController _rowController = TextEditingController(text: '1');
  • 把表格首行对应单元格替换为仅支持整数输入的TextField,设置输入限制仅允许输入数字
// 把这个组件放到首行对应的单元格位置
final _rowInputWidget = TextField(
  controller: _rowController,
  keyboardType: TextInputType.number,
  inputFormatters: [FilteringTextInputFormatter.digitsOnly],
  decoration: const InputDecoration(
    hintText: '输入行数',
    border: InputBorder.none,
    contentPadding: EdgeInsets.symmetric(horizontal: 8),
  ),
  onChanged: (value) {
    // 输入为空时默认设为0,也可以根据需求调整为1
    if (value.isEmpty) {
      setState(() {
        _rowCount = 0;
      });
      return;
    }
    // 转换为整数更新行数
    setState(() {
      _rowCount = int.parse(value);
    });
  },
);
  • 替换原有硬编码的50行DataRow生成逻辑,改用动态生成逻辑
rows: [
  // 首行是输入控制行,按你原有表格的列数补充对应单元格即可
  DataRow(cells: [
    const DataCell(Text('设置行数')),
    DataCell(_rowInputWidget),
    // 其余列的首行单元格按需补充内容
  ]),
  // 动态生成对应行数的业务数据行
  ...List.generate(_rowCount, (index) {
    return DataRow(cells: [
      DataCell(Text('${index + 1}')),
      // 其余列的单元格按照你原有业务逻辑填充即可
      DataCell(TextField()),
      DataCell(TextField()),
      // 对应你的表格列数补充剩余单元格
    ]);
  }),
]
  • 可选优化:如果需要限制最大输入行数,比如最多允许输入100行,可以在onChanged回调里增加判断逻辑
onChanged: (value) {
  if (value.isEmpty) {
    setState(() => _rowCount = 0);
    return;
  }
  int inputNum = int.parse(value);
  if (inputNum > 100) {
    inputNum = 100;
    _rowController.text = '100';
    // 保持光标在输入框末尾
    _rowController.selection = TextSelection.fromPosition(TextPosition(offset: _rowController.text.length));
  }
  setState(() => _rowCount = inputNum);
}

内容的提问来源于stack exchange,提问作者AafreenKhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:06:03