From 20d43b4ae49cfb8342076bd3f4123a87159b17a4 Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 29 Mar 2026 20:10:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E9=A2=84=E8=A7=88bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generate_video/generate_video_screen.dart | 8 ++++++++ lib/features/home/home_screen.dart | 19 ++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/features/generate_video/generate_video_screen.dart b/lib/features/generate_video/generate_video_screen.dart index da71513..cda704b 100644 --- a/lib/features/generate_video/generate_video_screen.dart +++ b/lib/features/generate_video/generate_video_screen.dart @@ -14,6 +14,7 @@ import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_typography.dart'; import '../../core/user/account_refresh.dart'; import '../../core/user/user_state.dart'; +import '../../features/home/home_playback_resume.dart'; import '../../features/home/models/task_item.dart'; import '../../shared/widgets/top_nav_bar.dart'; @@ -66,6 +67,13 @@ class _GenerateVideoScreenState extends State { }); } + @override + void dispose() { + // 从本页 pop(含关闭相册后再返回首页)时,底层首页需重新触发可见性;仅 [RouteAware.didPopNext] 有时序不足 + homePlaybackResumeNonce.value++; + super.dispose(); + } + /// Click flow per docs/generate_video.md: tap Generate Video -> image picker /// (camera or gallery) -> after image selected -> proceed to API. Future _onGenerateButtonTap() async { diff --git a/lib/features/home/home_screen.dart b/lib/features/home/home_screen.dart index 44f1adf..1076867 100644 --- a/lib/features/home/home_screen.dart +++ b/lib/features/home/home_screen.dart @@ -42,13 +42,26 @@ class _HomeScreenState extends State { final Map _cardVisibleFraction = {}; bool _visibilityReconcileScheduled = false; - /// IndexedStack 切回首页或 [homePlaybackResumeNonce] 递增后,立即让 [VisibilityDetector] 重新计算 + /// IndexedStack 切回首页或 [homePlaybackResumeNonce] 递增后,让 [VisibilityDetector] 重新计算。 + /// 单次 [notifyNow] 在「Modal 收起 / 子路由 pop」后首帧常过早,与 My Gallery 一致采用多帧 + 短延迟。 void _scheduleVisibilityRefresh() { - if (!widget.isActive) return; - WidgetsBinding.instance.addPostFrameCallback((_) { + if (!mounted || !widget.isActive) return; + void notify() { if (!mounted || !widget.isActive) return; VisibilityDetectorController.instance.notifyNow(); + } + + WidgetsBinding.instance.addPostFrameCallback((_) { + notify(); + WidgetsBinding.instance.addPostFrameCallback((_) { + notify(); + WidgetsBinding.instance.addPostFrameCallback((_) { + notify(); + }); + }); }); + Future.delayed(const Duration(milliseconds: 80), notify); + Future.delayed(const Duration(milliseconds: 220), notify); } @override