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