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

Firestore更新文档时duration字段被重置为0的问题如何解决

问题原因排查及解决方法

  • 第一个最常见的原因是变量未正确赋值:你在initState中把Firestore读到的时长赋值给了duration变量,但更新代码里提交的是durationOfTime变量,如果这个变量没有随时间修改同步更新、或是没有初始赋值为加载到的duration,默认值就是0,提交后就会把该字段覆盖为0。
  • 第二个可能是字段名不匹配:确认你创建文档时存储时长的字段名就是durationoftime,如果创建时用的是duration,更新时写别的字段名也会导致逻辑异常。
  • 第三个要检查时间修改后的联动逻辑:如果你允许用户在更新页面修改Time1、Time2,需要在这两个时间修改后立刻重新计算时长,赋值给要提交的变量,不要沿用初始化的旧值或者默认值。

修复示例代码

  1. 首先保证变量联动:
// 时间修改后调用该方法重新计算时长
void recalculateDuration() {
  if (time1 != null && time2 != null) {
    // 按你需要的时间单位调整,比如inMinutes、inHours
    duration = time2.difference(time1).inSeconds;
  }
}
  1. 调整更新提交的参数:
edit.update({
  'Time1': Time1,
  'Time2': Time2,
  // 直接用同步过的duration变量,无需额外定义durationOfTime
  'durationoftime': duration,
});

另外注意变量大小写一致性,你代码里initState中加载的是小写time1、time2,更新提交的是大写开头的Time1、Time2,也要确认和Firestore的字段名完全对应,避免出现字段重复或者赋值无效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:54:05