From 1723e480c19bbb4c911d086eb386f558e0873151 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Wed, 15 Jul 2026 00:39:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E8=AE=A2=E5=8D=95=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=89=93=E5=BC=80=E8=87=AA=E5=8A=A8=E9=87=8D=E6=8B=89?= =?UTF-8?q?=E5=88=97=E8=A1=A8=20+=20=E8=AE=A2=E5=8D=95=E6=97=B6=E9=97=B4?= =?UTF-8?q?=20UTC=20=E6=98=BE=E7=A4=BA=E8=BD=AC=E6=9C=AC=E5=9C=B0=E6=97=B6?= =?UTF-8?q?=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 打开订单管理 tab 时 invalidate 重建列表 provider(保留旧值展示不闪屏), 新下单/已删单不再需要手动刷新才同步 - license.dart 全部时间字段解析后 toLocal()(同 session.dart 惯例), 修复订单创建/支付时间显示为 UTC(慢 8 小时) Co-Authored-By: Claude Fable 5 --- client/lib/models/license.dart | 13 +++++++------ client/lib/screens/license/license_orders_tab.dart | 6 ++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/client/lib/models/license.dart b/client/lib/models/license.dart index a90fc6e..20fd221 100644 --- a/client/lib/models/license.dart +++ b/client/lib/models/license.dart @@ -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, ); } diff --git a/client/lib/screens/license/license_orders_tab.dart b/client/lib/screens/license/license_orders_tab.dart index af056bc..e8d370f 100644 --- a/client/lib/screens/license/license_orders_tab.dart +++ b/client/lib/screens/license/license_orders_tab.dart @@ -79,6 +79,12 @@ class _LicenseOrdersTabState extends ConsumerState { void initState() { super.initState(); _status = ref.read(purchaseListProvider.notifier).currentStatus; + // 每次打开订单页主动重拉:provider 是全局单例,否则一直显示上次进入时的 + // 内存旧列表(新下的单/已删的单不同步,须手动刷新才一致)。 + // invalidate 重建保留旧值展示(copyWithPrevious),刷新期间不闪白屏。 + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) ref.invalidate(purchaseListProvider); + }); } @override