Scroll to top on doubleTap on homescreen

This commit is contained in:
Neeraj Gupta 2022-10-22 16:38:07 +05:30
parent ba52280f39
commit a01c8fa8be
No known key found for this signature in database
GPG key ID: 3C5A1684DC1729E1

View file

@ -9,6 +9,7 @@ import 'package:photos/core/event_bus.dart';
import 'package:photos/ente_theme_data.dart';
import 'package:photos/events/event.dart';
import 'package:photos/events/files_updated_event.dart';
import 'package:photos/events/tab_changed_event.dart';
import 'package:photos/models/file.dart';
import 'package:photos/models/file_load_result.dart';
import 'package:photos/models/selected_files.dart';
@ -68,12 +69,16 @@ class _GalleryState extends State<Gallery> {
Logger _logger;
List<List<File>> _collatedFiles = [];
bool _hasLoadedFiles = false;
ItemScrollController _itemScroller;
StreamSubscription<FilesUpdatedEvent> _reloadEventSubscription;
StreamSubscription<TabDoubleTapEvent> _tabDoubleTapEvent;
final _forceReloadEventSubscriptions = <StreamSubscription<Event>>[];
@override
void initState() {
_logger = Logger("Gallery_" + widget.tagPrefix);
_itemScroller = ItemScrollController();
_logger.info("initState");
if (widget.reloadEvent != null) {
_reloadEventSubscription = widget.reloadEvent.listen((event) async {
@ -82,6 +87,14 @@ class _GalleryState extends State<Gallery> {
_onFilesLoaded(result.files);
});
}
_tabDoubleTapEvent =
Bus.instance.on<TabDoubleTapEvent>().listen((event) async {
// todo: Assign ID to Gallery and fire generic event with ID &
// target index/date
if (mounted && event.selectedIndex == 0) {
_itemScroller.jumpTo(index: 0);
}
});
if (widget.forceReloadEvents != null) {
for (final event in widget.forceReloadEvents) {
_forceReloadEventSubscriptions.add(
@ -159,6 +172,7 @@ class _GalleryState extends State<Gallery> {
@override
void dispose() {
_reloadEventSubscription?.cancel();
_tabDoubleTapEvent?.cancel();
for (final subscription in _forceReloadEventSubscriptions) {
subscription.cancel();
}
@ -177,7 +191,7 @@ class _GalleryState extends State<Gallery> {
Widget _getListView() {
return HugeListView<List<File>>(
key: _hugeListViewKey,
controller: ItemScrollController(),
controller: _itemScroller,
startIndex: 0,
totalCount: _collatedFiles.length,
isDraggableScrollbarEnabled: _collatedFiles.length > 30,