For the last few days, I've been reading through flutter framework documentation and especially the sliver part but I'm not quite sure where to start. I'm trying to implement the sticky headers and snap effect. Might the RenderSliverList be a good start? Do I need to re-layout things? Do I need to do additional drawing? And if so where?
Any help on where to start would be a huge help, thanks in advance!
Edit: I think I understood the layout part now, but I just can't find where the painting is supposed to happen.
Edit 2: For clarification, this is the desired "sticky header effect":
How can I make sticky headers in RecyclerView? (Without external lib)
and this is the "snap" effect:
https://rubensousa.github.io/2016/08/recyclerviewsnap
For the "sticky header effect" I ran into this problem myself, so I created this package to manage sticky headers with slivers: https://github.com/letsar/flutter_sticky_header
To use it you have to create one SliverStickyHeader
per section in a CustomScrollView
.
One section can be wrote like this:
new SliverStickyHeader(
header: new Container(
height: 60.0,
color: Colors.lightBlue,
padding: EdgeInsets.symmetric(horizontal: 16.0),
alignment: Alignment.centerLeft,
child: new Text(
'Header #0',
style: const TextStyle(color: Colors.white),
),
),
sliver: new SliverList(
delegate: new SliverChildBuilderDelegate(
(context, i) => new ListTile(
leading: new CircleAvatar(
child: new Text('0'),
),
title: new Text('List tile #$i'),
),
childCount: 4,
),
),
);
If you want, the entire source code for the above demo is here: https://github.com/letsar/flutter_sticky_header/blob/master/example/lib/main.dart
I hope this will help you.
It's dead simple :
Use a CustomScrollView
and give it as child both a SliverList
and a SliverAppBar
. You may replace the SliverList
with a SliverGrid
if you need to.
Then, depending on the effect you want to achieve, there are a few properties you may set on SliverAppBar
:
In the end, you may have something similar to :
new CustomScrollView(
slivers: <Widget>[
new SliverAppBar(
title: new Text("Title"),
snap: true,
floating: true,
),
new SliverFixedExtentList(
itemExtent: 50.0,
delegate: new SliverChildBuilderDelegate(
(BuildContext context, int index) {
return new Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 9)],
child: new Text('list item $index'),
);
},
),
),
],
)
Even better, you can concatenate different scroll behaviour inside a single CustomScrollView
.
Which means you can potentially have a grid followed by a list just by adding a SliverGrid
as a child to your scrollView.
I know I know, flutter is awesome.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With