Created
March 9, 2018 09:20
-
-
Save boldijar/619c2ab4da5315edb7f9dd77e850c684 to your computer and use it in GitHub Desktop.
List view in dart that will keep it's scrolling position
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
class DoubleHolder { | |
double value = 0.0; | |
} | |
class StatefulListView extends StatefulWidget { | |
final DoubleHolder offset = new DoubleHolder(); | |
StatefulListView(this._itemCount, | |
this._indexedWidgetBuilder, | |
{ | |
Key key | |
}) | |
: super(key: key); | |
double getOffsetMethod() { | |
return offset.value; | |
} | |
void setOffsetMethod(double val) { | |
offset.value = val; | |
} | |
final int _itemCount; | |
final IndexedWidgetBuilder _indexedWidgetBuilder; | |
@override | |
_StatefulListViewState createState() => | |
new _StatefulListViewState(_itemCount, _indexedWidgetBuilder); | |
} | |
class _StatefulListViewState extends State<StatefulListView> { | |
ScrollController scrollController; | |
final int _itemCount; | |
final IndexedWidgetBuilder _itemBuilder; | |
_StatefulListViewState(this._itemCount, this._itemBuilder); | |
@override | |
void initState() { | |
super.initState(); | |
scrollController = new ScrollController( | |
initialScrollOffset: widget.getOffsetMethod() | |
); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return new NotificationListener( | |
child: new ListView.builder( | |
controller: scrollController, | |
itemCount: _itemCount, | |
itemBuilder: _itemBuilder | |
), | |
onNotification: (notification) { | |
if (notification is ScrollNotification) { | |
widget.setOffsetMethod(notification.metrics.pixels); | |
} | |
}, | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment