2.5 KiB
2.5 KiB
订单列表生命周期修复操作日志
操作时间:2026-09-05 操作类型:修改 影响模块:用户端订单、退款、工单、合同及钱包流水列表
操作前状态
- 订单页在每次
build()时创建四个新的列表 ViewModel。 - 列表 State 仍监听旧对象,新对象未加载,旧异步请求可能在页面销毁后继续回调。
- 用户连续刷新时,较早请求可能覆盖较新请求的数据。
- 退款原因输入控制器在对话框退出动画结束前被释放,可能触发红屏。
- 退款提交成功后,订单和退款列表不会同步刷新。
具体操作
- 将 ViewModel 的创建、首次加载和释放统一收归
RecordListPageState。 - 通过稳定
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 请求本身不强制取消,过期结果会被忽略,不再更新已销毁页面。
- 支付发起后不提前假定支付成功,保持既有业务语义。