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
相关产品推荐
相关产品推荐

