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

Flutter DataTable2的TextFormField选日期后如何赋值避免整列值相同

DataTable2行内日期选择器绑定单行列值解决方案

问题根源

  • 全局通用的_selectedDate变量未关联点击行的独立数据,选完日期无法定位要赋值的目标行
  • 所有行的TextFormField共用同一个TextEditingController时,控制器数值变更会同步到所有绑定的输入控件,导致所有行值同步

解决方案

第一步:改造日期选择方法,关联当前行数据

修改_pickDateDialog,接收当前点击行的实体对象作为入参,选完日期直接修改对应行的属性:

// 入参的类名替换成你自己的mainScheduleModel对应的实体类名即可
void _pickDateDialog(ScheduleModel currentRowData) {
  showDatePicker(
    context: context,
    initialDate: DateTime.now(),
    firstDate: DateTime(1950),
    lastDate: DateTime.now()
  ).then((pickedDate) {
    if (pickedDate == null) return;
    // 日期格式可根据自己的业务需求调整
    String formattedDate = "${pickedDate.year}-${pickedDate.month.toString().padLeft(2,'0')}-${pickedDate.day.toString().padLeft(2,'0')}";
    setState(() {
      // 直接修改当前行的日期属性
      currentRowData.boardingDate = formattedDate;
    });
    // 同步更新Provider数据
    Provider.of<SchedulesProvider>(context, listen: false).editData(currentRowData);
  });
}

第二步:修改输入框点击回调,传入当前行数据

将TextFormField的onTap回调改为传入当前遍历到的行数据:

onTap: () => _pickDateDialog(data),

第三步:移除共用的TextEditingController

你当前的场景下,TextFormField已经通过initialValue绑定了当前行的data.boardingDate属性,只要行数据变更后调用setState触发页面重绘,对应行的输入框会自动更新数值,完全不需要额外配置控制器,也不会出现多行列值同步的问题。

可选优化(必须使用控制器的场景)

如果业务逻辑必须使用TextEditingController,可以在页面初始化时根据表格行数生成独立的控制器列表,每个索引对应一行的控制器,避免多控件共用同一个控制器:

// 页面内定义控制器列表
List<TextEditingController> dateControllers = [];

// 在initState中初始化控制器
@override
void initState() {
  super.initState();
  // 给每一行生成独立的控制器
  for (var data in mainScheduleModel) {
    dateControllers.add(TextEditingController(text: data.boardingDate));
  }
}

// 销毁时释放所有控制器
@override
void dispose() {
  for (var controller in dateControllers) {
    controller.dispose();
  }
  super.dispose();
}

// 绑定对应行的控制器到TextFormField
TextFormField(
  controller: dateControllers[mainScheduleModel.indexOf(data)],
  // 其余属性保持不变
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:48:02