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:flutter/material.dart';
import 'package:kiwi/kiwi.dart'; import 'package:kiwi/kiwi.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
@ -126,39 +127,32 @@ class _HomeState extends State<Home> with TickerProviderStateMixin {
Widget _buildPage(BuildContext context, int index) { Widget _buildPage(BuildContext context, int index) {
switch (index) { switch (index) {
case 0: case 0:
return _buildPhotosPage(context); return HomePhotos(
account: widget.account,
);
case 1: case 1:
return _buildSearchPage(context); return HomeSearch(
account: widget.account,
);
case 2: case 2:
return _buildAlbumsPage(context); return HomeAlbums(
account: widget.account,
);
default: default:
throw ArgumentError("Invalid page index: $index"); 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) { void _onTapNavItem(int index) {
if (index == _nextPage) { if (index == _nextPage) {
if (index == 0) {
KiwiContainer()
.resolve<EventBus>()
.fire(const HomePhotosBackToTopEvent());
}
return; return;
} }

View file

@ -58,6 +58,10 @@ import 'package:visibility_detector/visibility_detector.dart';
part 'home_photos.g.dart'; part 'home_photos.g.dart';
class HomePhotosBackToTopEvent {
const HomePhotosBackToTopEvent();
}
class HomePhotos extends StatefulWidget { class HomePhotos extends StatefulWidget {
const HomePhotos({ const HomePhotos({
Key? key, Key? key,
@ -85,10 +89,12 @@ class _HomePhotosState extends State<HomePhotos>
_web?.onInitState(); _web?.onInitState();
_prefUpdatedListener.begin(); _prefUpdatedListener.begin();
_imageProcessorUploadSuccessListener?.begin(); _imageProcessorUploadSuccessListener?.begin();
_onBackToTopListener.begin();
} }
@override @override
dispose() { dispose() {
_onBackToTopListener.end();
_prefUpdatedListener.end(); _prefUpdatedListener.end();
_imageProcessorUploadSuccessListener?.end(); _imageProcessorUploadSuccessListener?.end();
_web?.onDispose(); _web?.onDispose();
@ -524,6 +530,10 @@ class _HomePhotosState extends State<HomePhotos>
_hasFiredMetadataTask.value = false; _hasFiredMetadataTask.value = false;
} }
void _onBackToTop(HomePhotosBackToTopEvent ev) {
_scrollController.jumpTo(0);
}
Future<void> _tryStartMetadataTask({ Future<void> _tryStartMetadataTask({
bool ignoreFired = false, bool ignoreFired = false,
}) async { }) async {
@ -765,6 +775,8 @@ class _HomePhotosState extends State<HomePhotos>
? null ? null
: NativeEventListener<ImageProcessorUploadSuccessEvent>( : NativeEventListener<ImageProcessorUploadSuccessEvent>(
_onImageProcessorUploadSuccessEvent); _onImageProcessorUploadSuccessEvent);
late final _onBackToTopListener =
AppEventListener<HomePhotosBackToTopEvent>(_onBackToTop);
late final _Web? _web = platform_k.isWeb ? _Web(this) : null; late final _Web? _web = platform_k.isWeb ? _Web(this) : null;