statefullist.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import 'package:flutter/widgets.dart';
  2. class DoubleHolder {
  3. double value = 0.0;
  4. }
  5. class StatefulListView extends StatefulWidget {
  6. final DoubleHolder offset = new DoubleHolder();
  7. final int _itemCount;
  8. final IndexedWidgetBuilder _indexedWidgetBuilder;
  9. StatefulListView(
  10. this._itemCount,
  11. this._indexedWidgetBuilder,
  12. { Key key }
  13. ): super(key: key);
  14. double getOffsetMethod() => offset.value;
  15. void setOffsetMethod(double val) {
  16. offset.value = val;
  17. }
  18. @override
  19. _StatefulListViewState createState() => new _StatefulListViewState(_itemCount, _indexedWidgetBuilder);
  20. }
  21. class _StatefulListViewState extends State<StatefulListView> {
  22. ScrollController scrollController;
  23. final int _itemCount;
  24. final IndexedWidgetBuilder _itemBuilder;
  25. _StatefulListViewState(this._itemCount, this._itemBuilder);
  26. @override
  27. void initState() {
  28. super.initState();
  29. scrollController = new ScrollController(initialScrollOffset: widget.getOffsetMethod());
  30. }
  31. @override
  32. Widget build(BuildContext context) {
  33. return new NotificationListener(
  34. child: new ListView.builder(
  35. controller: scrollController,
  36. itemCount: _itemCount,
  37. itemBuilder: _itemBuilder,
  38. ),
  39. onNotification: (notification) {
  40. if (notification is ScrollNotification) {
  41. widget.setOffsetMethod(notification.metrics.pixels);
  42. }
  43. return;
  44. },
  45. );
  46. }
  47. }