Back to top when tapping the Photos navigation button again

This commit is contained in:
Ming Ming 2023-01-10 00:58:28 +08:00
parent 33b26d5ca1
commit bbdfe10a8d
2 changed files with 27 additions and 21 deletions

View file

@ -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<Home> 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<EventBus>()
.fire(const HomePhotosBackToTopEvent());
}
return;
}

View file

@ -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<HomePhotos>
_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<HomePhotos>
_hasFiredMetadataTask.value = false;
}
void _onBackToTop(HomePhotosBackToTopEvent ev) {
_scrollController.jumpTo(0);
}
Future<void> _tryStartMetadataTask({
bool ignoreFired = false,
}) async {
@ -765,6 +775,8 @@ class _HomePhotosState extends State<HomePhotos>
? null
: NativeEventListener<ImageProcessorUploadSuccessEvent>(
_onImageProcessorUploadSuccessEvent);
late final _onBackToTopListener =
AppEventListener<HomePhotosBackToTopEvent>(_onBackToTop);
late final _Web? _web = platform_k.isWeb ? _Web(this) : null;