Skip to content

Show transaction time down to seconds#393

Open
quecai-niu wants to merge 2 commits into
TNT-Likely:mainfrom
quecai-niu:fix/transaction-time-seconds
Open

Show transaction time down to seconds#393
quecai-niu wants to merge 2 commits into
TNT-Likely:mainfrom
quecai-niu:fix/transaction-time-seconds

Conversation

@quecai-niu

Copy link
Copy Markdown

Summary

  • Show transaction time down to seconds by default.
  • Include seconds in full-date transaction rows.
  • Preserve the existing time when only changing the transaction date, clamping future timestamps back to now.

Verification

  • flutter pub get
  • flutter build apk --debug --flavor dev -t lib/main.dart

@TNT-Likely

Copy link
Copy Markdown
Owner

@quecai-niu 感谢按建议把 #384 拆开了 👍 这个「显示到秒」PR 有两处需要改一下:

1.(必须改)改交易时间时,用户选的时间会被丢弃

amount_editor_sheet.dartmerged 这段落在了 if (showTime) 分支——而这个分支用的是日期+时间选择器 showWheelDateTimePicker(用户会在里面选时 / 分 / 秒,见 wheel_date_picker.dart:284 返回 (hour, minute, second))。但 merged原来的 _date.hour/minute/second 覆盖了用户刚选的 res 时分秒:

final merged = DateTime(res.year, res.month, res.day, _date.hour, _date.minute, _date.second);

结果:开启「显示交易时间」后,用户在选择器里把时间从 09:00 改到 14:30 → 被强制改回 09:00 → 时间选择器等于失效、用户改不了交易时间。(加上第 2 点默认开启,几乎所有人都会命中。)

修法:这个分支直接用用户选的结果即可——

if (res != null) setState(() => _date = res);

showWheelDateTimePicker 已经用 maxDate: DateTime.now() 限制了不能选未来,不必额外 clamp;真想保险可 res.isAfter(DateTime.now()) ? DateTime.now() : res。你那套「保留原时分秒」的逻辑只在「纯日期选择器」场景才有意义,而那个场景在 else 分支、且不显示时间,无需保留。

2.(请改回)默认维持「只显示日期」

showTransactionTimeProvider 默认从 false 改成了 true。这里我们倾向保持默认 false(只显示日期)——对大多数用户,明细行默认不显示时分秒更简洁、更符合习惯;想看时间的用户可以在设置里自行打开。所以请改回:

final showTransactionTimeProvider = StateProvider<bool>((ref) => false);

(对应注释也改回即可。)


其余没问题:transaction_list_item 把完整日期模式补到秒、与时间模式对齐,OK。这两处改完就能合了,辛苦 🙏

1、恢复交易时间默认关闭并保留用户选择的时分秒
@quecai-niu

Copy link
Copy Markdown
Author

@TNT-Likely 感谢 review,已按建议修改并推送(1806ee4):

  1. showWheelDateTimePicker 返回后直接保存 res,不再用旧的时分秒覆盖用户选择结果。
  2. showTransactionTimeProvider 默认值已恢复为 false,对应注释也已改回;用户主动开启后,明细时间仍显示到秒。

transaction_list_item.dartHH:mm:ss 改动保持不变。已通过 flutter build apk --debug --flavor dev -t lib/main.dart,辛苦再看一下 🙏

@TNT-Likely

Copy link
Copy Markdown
Owner

@quecai-niu 感谢 PR。这个改动 diff 虽小(+6/-5),但它改变的是默认产品行为——所有用户的交易时间默认显示到秒,影响面其实不小。所以想先把背景对齐清楚,再看代码。

想请你补充三点:

  1. 出发点 / 要解决的问题:是遇到了什么具体场景或需求才需要显示到秒?(例如同一分钟内多笔交易需要区分先后?)
  2. 产品方案的考量:为什么选择默认显示到秒,而不是默认只到日期/分钟、需要时再可选?维护者目前的倾向是「默认只显示日期更符合大多数记账用户的习惯」,想听听你这边的产品理由。
  3. 代码方案:简述下实现,特别是『只改日期时保留原时间、未来时间戳 clamp 回 now』这段的考量——什么情况下会出现未来时间戳?

把"要解决的问题"和"方案"说清楚,我们再 review 代码会更准、也能避免只盯着代码对不对却漏了该不该这么做。谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants