fix(client): 订单管理打开自动重拉列表 + 订单时间 UTC 显示转本地时区

- 打开订单管理 tab 时 invalidate 重建列表 provider(保留旧值展示不闪屏),
  新下单/已删单不再需要手动刷新才同步
- license.dart 全部时间字段解析后 toLocal()(同 session.dart 惯例),
  修复订单创建/支付时间显示为 UTC(慢 8 小时)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-07-15 00:39:29 +08:00
parent b8567b0f4e
commit 1723e480c1
2 changed files with 13 additions and 6 deletions
+7 -6
View File
@@ -26,7 +26,7 @@ class LicenseInfo {
maxDevices: (json['max_devices'] as num?)?.toInt() ??
AppConstants.defaultMaxDevices,
expiresAt: json['expires_at'] != null
? DateTime.tryParse(json['expires_at'] as String)
? DateTime.tryParse(json['expires_at'] as String)?.toLocal()
: null,
phase: json['phase'] as String? ?? 'normal',
);
@@ -139,10 +139,10 @@ class PurchaseStatusInfo {
currency: json['currency'] as String? ?? 'CNY',
amount: json['amount'] as String? ?? '',
paidAt: json['paid_at'] != null
? DateTime.tryParse(json['paid_at'] as String)
? DateTime.tryParse(json['paid_at'] as String)?.toLocal()
: null,
expiresAt: json['expires_at'] != null
? DateTime.tryParse(json['expires_at'] as String)
? DateTime.tryParse(json['expires_at'] as String)?.toLocal()
: null,
);
}
@@ -191,14 +191,15 @@ class PurchaseRecord {
status: json['status'] as String? ?? 'pending',
payUrl: json['pay_url'] as String? ?? '',
userName: json['user_name'] as String? ?? '',
// 服务端时间为 UTC(RFC3339 Z),展示前转本地时区(同 session.dart 惯例)
createdAt: json['created_at'] != null
? DateTime.tryParse(json['created_at'] as String)
? DateTime.tryParse(json['created_at'] as String)?.toLocal()
: null,
paidAt: json['paid_at'] != null
? DateTime.tryParse(json['paid_at'] as String)
? DateTime.tryParse(json['paid_at'] as String)?.toLocal()
: null,
renewedTo: json['renewed_to'] != null
? DateTime.tryParse(json['renewed_to'] as String)
? DateTime.tryParse(json['renewed_to'] as String)?.toLocal()
: null,
);
}
@@ -79,6 +79,12 @@ class _LicenseOrdersTabState extends ConsumerState<LicenseOrdersTab> {
void initState() {
super.initState();
_status = ref.read(purchaseListProvider.notifier).currentStatus;
// 每次打开订单页主动重拉:provider 是全局单例,否则一直显示上次进入时的
// 内存旧列表(新下的单/已删的单不同步,须手动刷新才一致)。
// invalidate 重建保留旧值展示(copyWithPrevious),刷新期间不闪白屏。
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) ref.invalidate(purchaseListProvider);
});
}
@override