Firestore更新文档时duration字段被重置为0的问题如何解决
问题原因排查及解决方法
- 第一个最常见的原因是变量未正确赋值:你在
initState中把Firestore读到的时长赋值给了duration变量,但更新代码里提交的是durationOfTime变量,如果这个变量没有随时间修改同步更新、或是没有初始赋值为加载到的duration,默认值就是0,提交后就会把该字段覆盖为0。 - 第二个可能是字段名不匹配:确认你创建文档时存储时长的字段名就是
durationoftime,如果创建时用的是duration,更新时写别的字段名也会导致逻辑异常。 - 第三个要检查时间修改后的联动逻辑:如果你允许用户在更新页面修改
Time1、Time2,需要在这两个时间修改后立刻重新计算时长,赋值给要提交的变量,不要沿用初始化的旧值或者默认值。
修复示例代码
- 首先保证变量联动:
// 时间修改后调用该方法重新计算时长 void recalculateDuration() { if (time1 != null && time2 != null) { // 按你需要的时间单位调整,比如inMinutes、inHours duration = time2.difference(time1).inSeconds; } }
- 调整更新提交的参数:
edit.update({ 'Time1': Time1, 'Time2': Time2, // 直接用同步过的duration变量,无需额外定义durationOfTime 'durationoftime': duration, });
另外注意变量大小写一致性,你代码里initState中加载的是小写time1、time2,更新提交的是大写开头的Time1、Time2,也要确认和Firestore的字段名完全对应,避免出现字段重复或者赋值无效的问题。
内容的提问来源于stack exchange,提问作者akhicoda
相关产品推荐
相关产品推荐

