Files
platforms/docs/开发日志_订单列表生命周期修复_20260905.md

2.5 KiB
Raw Blame History

订单列表生命周期修复操作日志

操作时间2026-09-05 操作类型:修改 影响模块:用户端订单、退款、工单、合同及钱包流水列表

操作前状态

  • 订单页在每次 build() 时创建四个新的列表 ViewModel。
  • 列表 State 仍监听旧对象,新对象未加载,旧异步请求可能在页面销毁后继续回调。
  • 用户连续刷新时,较早请求可能覆盖较新请求的数据。
  • 退款原因输入控制器在对话框退出动画结束前被释放,可能触发红屏。
  • 退款提交成功后,订单和退款列表不会同步刷新。

具体操作

  • 将 ViewModel 的创建、首次加载和释放统一收归 RecordListPage State。
  • 通过稳定 sourceKey 识别数据源,通过 refreshToken 接收外部刷新命令。
  • 为四个订单标签增加稳定 Key 和 keep-alive保留数据、错误状态及滚动位置。
  • ViewModel 增加请求代次和销毁保护,仅最后一次请求可更新状态。
  • 退款成功后刷新对应订单列表及退款列表。
  • 将退款输入控制器移入独立有状态对话框,随对话框生命周期安全释放。
  • 合同和钱包流水改用相同的公共列表生命周期契约。

代码变更

  • apps/user_app/lib/ui/features/shared/record_list_view_model.dart:增加请求竞争和销毁保护。
  • apps/user_app/lib/ui/features/shared/record_list_page.dart:统一 ViewModel 所有权并支持稳定刷新。
  • apps/user_app/lib/ui/features/orders/orders_page.dart:稳定四个标签并联动退款刷新。
  • apps/user_app/lib/app/router.dart:迁移合同和钱包列表调用方式。
  • apps/user_app/test/ui/record_list_view_model_test.dart:覆盖旧请求和销毁边界。
  • apps/user_app/test/ui/record_list_page_test.dart:覆盖父组件重建及显式刷新。
  • apps/user_app/test/ui/orders_page_test.dart:覆盖退款成功后的跨列表刷新和红屏回归。

验证结果

  • flutter analyze:通过,无静态分析问题。
  • 三组新增定向测试共 4 项全部通过。
  • flutter test:完整 33 项测试全部通过。
  • 用户端 Release Web 构建成功,本地静态服务 http://127.0.0.1:5180/ 返回 HTTP 200。
  • 本地后端 12426 健康检查返回 HTTP 200。

风险评估

  • 仅修改用户端内部组件接口,所有仓库内调用点已同步迁移。
  • HTTP 请求本身不强制取消,过期结果会被忽略,不再更新已销毁页面。
  • 支付发起后不提前假定支付成功,保持既有业务语义。