48 lines
2.5 KiB
Markdown
48 lines
2.5 KiB
Markdown
# 订单列表生命周期修复操作日志
|
||
|
||
操作时间: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 请求本身不强制取消,过期结果会被忽略,不再更新已销毁页面。
|
||
- 支付发起后不提前假定支付成功,保持既有业务语义。
|