import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/presentation/widgets/memory/memory_lane.widget.dart'; import 'package:immich_mobile/presentation/widgets/timeline/timeline.widget.dart'; import 'package:immich_mobile/presentation/widgets/feature_message/feature_message_dialog.widget.dart'; import 'package:immich_mobile/providers/feature_message.provider.dart'; import 'package:immich_mobile/providers/infrastructure/memory.provider.dart'; @RoutePage() class MainTimelinePage extends ConsumerStatefulWidget { const MainTimelinePage({super.key}); @override ConsumerState createState() => _MainTimelinePageState(); } class _MainTimelinePageState extends ConsumerState { @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { if (!mounted) { return; } final service = ref.read(featureMessageServiceProvider); if (!service.shouldShow()) { return; } await service.markSeen(); if (!mounted) { return; } await showFeatureMessageDialog(context); }); } @override Widget build(BuildContext context) { final hasMemories = ref.watch(driftMemoryFutureProvider.select((state) => state.value?.isNotEmpty ?? false)); return Timeline( topSliverWidget: const SliverToBoxAdapter(child: DriftMemoryLane()), topSliverWidgetHeight: hasMemories ? 200 : 0, showStorageIndicator: true, ); } }