diff --git a/app/lib/widget/home.dart b/app/lib/widget/home.dart index b22eae13..d137d967 100644 --- a/app/lib/widget/home.dart +++ b/app/lib/widget/home.dart @@ -1,3 +1,4 @@ +import 'package:event_bus/event_bus.dart'; import 'package:flutter/material.dart'; import 'package:kiwi/kiwi.dart'; import 'package:logging/logging.dart'; @@ -126,39 +127,32 @@ class _HomeState extends State with TickerProviderStateMixin { Widget _buildPage(BuildContext context, int index) { switch (index) { case 0: - return _buildPhotosPage(context); + return HomePhotos( + account: widget.account, + ); case 1: - return _buildSearchPage(context); + return HomeSearch( + account: widget.account, + ); case 2: - return _buildAlbumsPage(context); + return HomeAlbums( + account: widget.account, + ); default: throw ArgumentError("Invalid page index: $index"); } } - Widget _buildPhotosPage(BuildContext context) { - return HomePhotos( - account: widget.account, - ); - } - - Widget _buildSearchPage(BuildContext context) { - return HomeSearch( - account: widget.account, - ); - } - - Widget _buildAlbumsPage(BuildContext context) { - return HomeAlbums( - account: widget.account, - ); - } - void _onTapNavItem(int index) { if (index == _nextPage) { + if (index == 0) { + KiwiContainer() + .resolve() + .fire(const HomePhotosBackToTopEvent()); + } return; } diff --git a/app/lib/widget/home_photos.dart b/app/lib/widget/home_photos.dart index cbbee1e3..284182ac 100644 --- a/app/lib/widget/home_photos.dart +++ b/app/lib/widget/home_photos.dart @@ -58,6 +58,10 @@ import 'package:visibility_detector/visibility_detector.dart'; part 'home_photos.g.dart'; +class HomePhotosBackToTopEvent { + const HomePhotosBackToTopEvent(); +} + class HomePhotos extends StatefulWidget { const HomePhotos({ Key? key, @@ -85,10 +89,12 @@ class _HomePhotosState extends State _web?.onInitState(); _prefUpdatedListener.begin(); _imageProcessorUploadSuccessListener?.begin(); + _onBackToTopListener.begin(); } @override dispose() { + _onBackToTopListener.end(); _prefUpdatedListener.end(); _imageProcessorUploadSuccessListener?.end(); _web?.onDispose(); @@ -524,6 +530,10 @@ class _HomePhotosState extends State _hasFiredMetadataTask.value = false; } + void _onBackToTop(HomePhotosBackToTopEvent ev) { + _scrollController.jumpTo(0); + } + Future _tryStartMetadataTask({ bool ignoreFired = false, }) async { @@ -765,6 +775,8 @@ class _HomePhotosState extends State ? null : NativeEventListener( _onImageProcessorUploadSuccessEvent); + late final _onBackToTopListener = + AppEventListener(_onBackToTop); late final _Web? _web = platform_k.isWeb ? _Web(this) : null;