Make events page remember scroll position when changing layouts.
This commit is contained in:
parent
92038ed12a
commit
d4d27751eb
@ -7,18 +7,23 @@ class _EventsList extends StatefulWidget {
|
|||||||
this.topHeight = 0,
|
this.topHeight = 0,
|
||||||
this.blurOnScroll = false,
|
this.blurOnScroll = false,
|
||||||
this.showTopGradient = true,
|
this.showTopGradient = true,
|
||||||
|
required this.initialScrollOffset,
|
||||||
|
required this.onScroll,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
final WonderData data;
|
final WonderData data;
|
||||||
final double topHeight;
|
final double topHeight;
|
||||||
final bool blurOnScroll;
|
final bool blurOnScroll;
|
||||||
final bool showTopGradient;
|
final bool showTopGradient;
|
||||||
|
final double initialScrollOffset;
|
||||||
|
final void Function(double offset) onScroll;
|
||||||
@override
|
@override
|
||||||
State<_EventsList> createState() => _EventsListState();
|
State<_EventsList> createState() => _EventsListState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _EventsListState extends State<_EventsList> {
|
class _EventsListState extends State<_EventsList> {
|
||||||
final ScrollController _scroller = ScrollController();
|
late final ScrollController _scroller = ScrollController(initialScrollOffset: widget.initialScrollOffset)
|
||||||
|
..addListener(() => widget.onScroll(_scroller.offset));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_scroller.dispose();
|
_scroller.dispose();
|
||||||
|
@ -24,6 +24,9 @@ class WonderEvents extends StatelessWidget {
|
|||||||
final WonderType type;
|
final WonderType type;
|
||||||
late final _data = wondersLogic.getData(type);
|
late final _data = wondersLogic.getData(type);
|
||||||
|
|
||||||
|
double _scrollPos = 0;
|
||||||
|
void _handleScroll(double pos) => _scrollPos = pos;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
void handleTimelineBtnPressed() => context.push(ScreenPaths.timeline(type));
|
void handleTimelineBtnPressed() => context.push(ScreenPaths.timeline(type));
|
||||||
@ -102,6 +105,8 @@ class WonderEvents extends StatelessWidget {
|
|||||||
data: _data,
|
data: _data,
|
||||||
topHeight: 100,
|
topHeight: 100,
|
||||||
blurOnScroll: false,
|
blurOnScroll: false,
|
||||||
|
onScroll: _handleScroll,
|
||||||
|
initialScrollOffset: _scrollPos,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -130,6 +135,8 @@ class WonderEvents extends StatelessWidget {
|
|||||||
topHeight: topHeight,
|
topHeight: topHeight,
|
||||||
blurOnScroll: true,
|
blurOnScroll: true,
|
||||||
showTopGradient: false,
|
showTopGradient: false,
|
||||||
|
onScroll: _handleScroll,
|
||||||
|
initialScrollOffset: _scrollPos,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Gap($styles.insets.lg),
|
Gap($styles.insets.lg),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user