Browse Source

Preserve the listview's scroll position on extra data load

Vishnu Mohandas 5 years ago
parent
commit
bde40929be
1 changed files with 10 additions and 3 deletions
  1. 10 3
      lib/ui/gallery.dart

+ 10 - 3
lib/ui/gallery.dart

@@ -42,13 +42,15 @@ class Gallery extends StatefulWidget {
 }
 }
 
 
 class _GalleryState extends State<Gallery> {
 class _GalleryState extends State<Gallery> {
-  final Logger _logger = Logger("Gallery");
   static final int kLoadLimit = 100;
   static final int kLoadLimit = 100;
-  final ScrollController _scrollController = ScrollController();
+
+  final Logger _logger = Logger("Gallery");
   final List<List<File>> _collatedFiles = List<List<File>>();
   final List<List<File>> _collatedFiles = List<List<File>>();
 
 
+  ScrollController _scrollController = ScrollController();
   bool _requiresLoad = false;
   bool _requiresLoad = false;
   bool _hasLoadedAll = false;
   bool _hasLoadedAll = false;
+  double _scrollOffset = 0;
   Set<File> _selectedFiles = HashSet<File>();
   Set<File> _selectedFiles = HashSet<File>();
   List<File> _files;
   List<File> _files;
   RefreshController _refreshController = RefreshController();
   RefreshController _refreshController = RefreshController();
@@ -99,6 +101,9 @@ class _GalleryState extends State<Gallery> {
     }
     }
     _selectedFiles = widget.selectedFiles ?? Set<File>();
     _selectedFiles = widget.selectedFiles ?? Set<File>();
     _collateFiles();
     _collateFiles();
+    _scrollController = ScrollController(
+      initialScrollOffset: _scrollOffset,
+    );
     final list = ListView.builder(
     final list = ListView.builder(
       itemCount: _collatedFiles.length + 1, // h4ck to load the next set
       itemCount: _collatedFiles.length + 1, // h4ck to load the next set
       itemBuilder: _buildListItem,
       itemBuilder: _buildListItem,
@@ -134,6 +139,7 @@ class _GalleryState extends State<Gallery> {
       }
       }
       widget.asyncLoader(_files.length, 100).then((files) {
       widget.asyncLoader(_files.length, 100).then((files) {
         setState(() {
         setState(() {
+          _scrollOffset = _scrollController.offset;
           if (files.length == 0) {
           if (files.length == 0) {
             _hasLoadedAll = true;
             _hasLoadedAll = true;
           }
           }
@@ -163,7 +169,8 @@ class _GalleryState extends State<Gallery> {
     return GridView.builder(
     return GridView.builder(
       shrinkWrap: true,
       shrinkWrap: true,
       padding: EdgeInsets.only(bottom: 12),
       padding: EdgeInsets.only(bottom: 12),
-      physics: ScrollPhysics(), // to disable GridView's scrolling
+      physics:
+          NeverScrollableScrollPhysics(), // to disable GridView's scrolling
       itemBuilder: (context, index) {
       itemBuilder: (context, index) {
         return _buildFile(context, files[index]);
         return _buildFile(context, files[index]);
       },
       },