Scroll to top after delete

This commit is contained in:
laurenspriem
2025-08-29 15:49:09 +05:30
parent 62cf236e3b
commit 46e36612d3

View File

@@ -77,6 +77,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
late SelectedFiles _selectedFiles;
late ValueNotifier<String> _deleteProgress;
late ScrollController _scrollController;
List<SimilarFiles> get _filteredGroups {
final filteredGroups = <SimilarFiles>[];
@@ -111,6 +112,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
super.initState();
_selectedFiles = SelectedFiles();
_deleteProgress = ValueNotifier("");
_scrollController = ScrollController();
if (!widget.debugScreen) {
_findSimilarImages();
@@ -122,6 +124,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
_isDisposed = true;
_selectedFiles.dispose();
_deleteProgress.dispose();
_scrollController.dispose();
super.dispose();
}
@@ -385,6 +388,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
),
)
: ListView.builder(
controller: _scrollController,
cacheExtent: 400,
itemCount: _filteredGroups.length,
itemBuilder: (context, index) {
@@ -558,6 +562,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
selectedFilteredFiles,
showDialog: true,
showUIFeedback: true,
scrollToTop: true,
);
},
),
@@ -922,6 +927,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
Set<EnteFile> filesToDelete, {
bool showDialog = true,
bool showUIFeedback = true,
bool scrollToTop = false,
}) async {
if (filesToDelete.isEmpty) return;
if (showDialog) {
@@ -937,6 +943,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
filesToDelete,
true,
showUIFeedback: showUIFeedback,
scrollToTop: scrollToTop,
);
} catch (e, s) {
_logger.severe("Failed to delete files", e, s);
@@ -951,6 +958,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
filesToDelete,
true,
showUIFeedback: showUIFeedback,
scrollToTop: scrollToTop,
);
}
}
@@ -959,6 +967,7 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
Set<EnteFile> filesToDelete,
bool createSymlink, {
bool showUIFeedback = true,
bool scrollToTop = false,
}) async {
if (filesToDelete.isEmpty) {
return;
@@ -1041,6 +1050,15 @@ class _SimilarImagesPageState extends State<SimilarImagesPage> {
setState(() {});
await deleteFilesFromRemoteOnly(context, allDeleteFiles.toList());
// Scroll to top if requested
if (scrollToTop && mounted) {
await _scrollController.animateTo(
0,
duration: const Duration(milliseconds: 500),
curve: Curves.easeOutCubic,
);
}
// Show congratulations popup
if (allDeleteFiles.length > 100 && mounted && showUIFeedback) {
final int totalSize = allDeleteFiles.fold<int>(