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

48 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 订单列表生命周期修复操作日志
操作时间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 请求本身不强制取消,过期结果会被忽略,不再更新已销毁页面。
- 支付发起后不提前假定支付成功,保持既有业务语义。