Skip to content

Instantly share code, notes, and snippets.

@magicleon94
Created June 27, 2019 18:15
Show Gist options
  • Save magicleon94/86e99dd4ea6ecaa7a3dcbaf98f826fb5 to your computer and use it in GitHub Desktop.
Save magicleon94/86e99dd4ea6ecaa7a3dcbaf98f826fb5 to your computer and use it in GitHub Desktop.
Always up button on scroll view
//Hello Gonçalo!
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
ValueNotifier<double> _notifier;
ScrollController _controller;
double _previousOffset;
@override
void dispose() {
_notifier?.dispose();
super.dispose();
}
@override
void initState() {
_notifier = ValueNotifier<double>(0);
_controller = ScrollController()..addListener(_onScroll);
_previousOffset = 0;
super.initState();
}
void _onScroll(){
if (_controller.offset == 0 || _controller.offset < _previousOffset) {
_notifier.value = -(_controller.position.maxScrollExtent - _controller.offset);
}else{
_notifier.value = 0;
}
_previousOffset = _controller.offset;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Potato"),),
body: SingleChildScrollView(
controller: _controller,
child: Column(
children: <Widget>[
Text("potato " * 900),
ValueListenableBuilder(
valueListenable: _notifier,
child: RaisedButton(
child: Text("POTATO!"),
onPressed: () {},
color: Theme.of(context).accentColor,
),
builder: (context, offset, child) {
return Transform.translate(
offset: Offset(0, offset),
child: child,
);
},
)
],
),
),
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment