From 75408ad02b79702615af346ba4e8ab042399200e Mon Sep 17 00:00:00 2001 From: vishnukvmd Date: Wed, 7 Dec 2022 09:27:54 +0530 Subject: [PATCH 1/3] Fix stutter while scrolling --- lib/ui/huge_listview/place_holder_widget.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ui/huge_listview/place_holder_widget.dart b/lib/ui/huge_listview/place_holder_widget.dart index 33ee6cb94..ac87a3a0a 100644 --- a/lib/ui/huge_listview/place_holder_widget.dart +++ b/lib/ui/huge_listview/place_holder_widget.dart @@ -1,6 +1,7 @@ // @dart=2.9 import 'package:flutter/material.dart'; +import 'package:photos/utils/local_settings.dart'; class PlaceHolderWidget extends StatelessWidget { const PlaceHolderWidget( @@ -26,8 +27,8 @@ class PlaceHolderWidget extends StatelessWidget { ); }, itemCount: count, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: LocalSettings.instance.getPhotoGridSize(), ), ); } From 48223925111a3fe3f46447babc7100c719444cf4 Mon Sep 17 00:00:00 2001 From: vishnukvmd Date: Wed, 7 Dec 2022 09:38:42 +0530 Subject: [PATCH 2/3] Fix placeholder grid cache --- lib/ui/huge_listview/lazy_loading_gallery.dart | 15 +++++++++++---- lib/ui/huge_listview/place_holder_widget.dart | 18 ++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/ui/huge_listview/lazy_loading_gallery.dart b/lib/ui/huge_listview/lazy_loading_gallery.dart index 04410feee..15a59d467 100644 --- a/lib/ui/huge_listview/lazy_loading_gallery.dart +++ b/lib/ui/huge_listview/lazy_loading_gallery.dart @@ -232,7 +232,12 @@ class _LazyLoadingGalleryState extends State { ) ], ), - _shouldRender ? _getGallery() : PlaceHolderWidget(_files.length), + _shouldRender + ? _getGallery() + : PlaceHolderWidget( + _files.length, + LocalSettings.instance.getPhotoGridSize(), + ), ], ); } @@ -299,6 +304,7 @@ class LazyLoadingGridView extends StatefulWidget { class _LazyLoadingGridViewState extends State { bool _shouldRender; + int _photoGridSize; StreamSubscription _clearSelectionsEvent; @override @@ -334,6 +340,7 @@ class _LazyLoadingGridViewState extends State { @override Widget build(BuildContext context) { + _photoGridSize = LocalSettings.instance.getPhotoGridSize(); if (widget.shouldRecycle) { return _getRecyclableView(); } else { @@ -354,7 +361,7 @@ class _LazyLoadingGridViewState extends State { }, child: _shouldRender ? _getGridView() - : PlaceHolderWidget(widget.filesInDay.length), + : PlaceHolderWidget(widget.filesInDay.length, _photoGridSize), ); } @@ -369,7 +376,7 @@ class _LazyLoadingGridViewState extends State { }); } }, - child: PlaceHolderWidget(widget.filesInDay.length), + child: PlaceHolderWidget(widget.filesInDay.length, _photoGridSize), ); } else { return _getGridView(); @@ -388,7 +395,7 @@ class _LazyLoadingGridViewState extends State { gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisSpacing: 2, mainAxisSpacing: 2, - crossAxisCount: LocalSettings.instance.getPhotoGridSize(), + crossAxisCount: _photoGridSize, ), padding: const EdgeInsets.all(0), ); diff --git a/lib/ui/huge_listview/place_holder_widget.dart b/lib/ui/huge_listview/place_holder_widget.dart index ac87a3a0a..a5b18ba18 100644 --- a/lib/ui/huge_listview/place_holder_widget.dart +++ b/lib/ui/huge_listview/place_holder_widget.dart @@ -5,18 +5,20 @@ import 'package:photos/utils/local_settings.dart'; class PlaceHolderWidget extends StatelessWidget { const PlaceHolderWidget( - this.count, { + this.count, + this.columns, { Key key, }) : super(key: key); - final int count; + final int count, columns; - static final _gridViewCache = {}; + static final _gridViewCache = {}; @override Widget build(BuildContext context) { - if (!_gridViewCache.containsKey(count)) { - _gridViewCache[count] = GridView.builder( + final key = _getCacheKey(count, columns); + if (!_gridViewCache.containsKey(key)) { + _gridViewCache[key] = GridView.builder( padding: const EdgeInsets.all(0), shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), @@ -32,6 +34,10 @@ class PlaceHolderWidget extends StatelessWidget { ), ); } - return _gridViewCache[count]; + return _gridViewCache[key]; + } + + String _getCacheKey(int totalCount, int columns) { + return totalCount.toString() + ":" + columns.toString(); } } From 81df5d07a78811a54e2a1065816093da1fd9b479 Mon Sep 17 00:00:00 2001 From: vishnukvmd Date: Wed, 7 Dec 2022 09:40:53 +0530 Subject: [PATCH 3/3] Use injected columns instead of reading from LocalSettings --- lib/ui/huge_listview/place_holder_widget.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ui/huge_listview/place_holder_widget.dart b/lib/ui/huge_listview/place_holder_widget.dart index a5b18ba18..06c0d3342 100644 --- a/lib/ui/huge_listview/place_holder_widget.dart +++ b/lib/ui/huge_listview/place_holder_widget.dart @@ -1,7 +1,6 @@ // @dart=2.9 import 'package:flutter/material.dart'; -import 'package:photos/utils/local_settings.dart'; class PlaceHolderWidget extends StatelessWidget { const PlaceHolderWidget( @@ -30,7 +29,7 @@ class PlaceHolderWidget extends StatelessWidget { }, itemCount: count, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: LocalSettings.instance.getPhotoGridSize(), + crossAxisCount: columns, ), ); }