mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-09 07:28:14 -07:00
Init repo
This commit is contained in:
commit
764b6034e3
566 changed files with 212335 additions and 0 deletions
66
lib/widgets/shared/scroll_position.dart
Normal file
66
lib/widgets/shared/scroll_position.dart
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
enum ScrollState {
|
||||
top,
|
||||
middle,
|
||||
bottom,
|
||||
}
|
||||
|
||||
class ScrollStatePosition extends ConsumerStatefulWidget {
|
||||
final ScrollController? controller;
|
||||
final Widget Function(ScrollState state) positionBuilder;
|
||||
|
||||
const ScrollStatePosition({
|
||||
this.controller,
|
||||
required this.positionBuilder,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
ConsumerState<ConsumerStatefulWidget> createState() => _ScrollStatePositionState();
|
||||
}
|
||||
|
||||
class _ScrollStatePositionState extends ConsumerState<ScrollStatePosition> {
|
||||
late final scrollController = widget.controller ?? ScrollController();
|
||||
ScrollState scrollState = ScrollState.top;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
scrollController.addListener(listen);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
scrollController.removeListener(listen);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void listen() {
|
||||
if (scrollController.offset < scrollController.position.maxScrollExtent) {
|
||||
if (scrollController.position.atEdge) {
|
||||
bool isTop = scrollController.position.pixels == 0;
|
||||
if (isTop) {
|
||||
setState(() {
|
||||
scrollState = ScrollState.top;
|
||||
});
|
||||
print('At the top');
|
||||
} else {
|
||||
setState(() {
|
||||
scrollState = ScrollState.bottom;
|
||||
});
|
||||
}
|
||||
} else {
|
||||
setState(() {
|
||||
scrollState = ScrollState.middle;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return widget.positionBuilder(scrollState);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue