This is the code to build an app with a floating appbar:
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new CustomScrollView(slivers: <Widget>[
new SliverAppBar(
title: new Text('Sliver App Bar'),
floating: true,
snap: true,
bottom: PreferredSize(
preferredSize: const Size.fromHeight(90.0),
child: new Text('dddd'),
),
),
new SliverList(
delegate: new SliverChildListDelegate(buildTextViews(50)))
]),
);
}
This is the code to build an app (without floating appbar) using a StreamBuilder:
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
backgroundColor: Colors.orangeAccent,
title: new Text('Find Anything'),
bottom: PreferredSize(
preferredSize: const Size.fromHeight(48.0),
child: new Text('dddd'),
),
),
body: new StreamBuilder(
stream: Firestore.instance.collection('posts').snapshots(),
builder: (context, snapshot) {
List<TekongoPost> posts = preparePosts(snapshot.data.documents);
print("************$posts[0]*************");
if (!snapshot.hasData) return const Text('Loading...');
return ListView.builder(
itemCount: posts.length,
// padding: const EdgeInsets.only(top: 10.0),
// itemExtent: 25.0,
itemBuilder: (context,index) {
return getListItem(context,posts[index]);
},
);
}),
);
}
}
How do I create an app with a floating appbar using slivers as in the first case above and at the same time use a StreamBuilder as above?
Builders in flutter do nothing. You can very well wrap a SliverList
into a StreamBuilder
or whatever other builders. It will still work as expected.
So the only thing you need to make sure is that your builder correctly returns a Sliver
such as SliverList
.
CustomScrollView(
slivers: <Widget>[
SliverAppBar(),
StreamBuilder<List<String>>(
stream: myStream,
builder: (context, snapshot) {
return SliverList(
delegate: SliverChildBuilderDelegate((context, index) {
return ListTile(title: Text(snapshot.data[index]));
},
childCount: snapshot.hasData ? snapshot.data.length : 0,
),
);
},
)
],
),
I got it to work using a FutureBuilder
return new Scaffold(
body: new CustomScrollView(slivers: <Widget>[
new SliverAppBar(
title: new Text('Sliver App Bar'),
floating: true,
snap: true,
bottom: PreferredSize(
preferredSize: const Size.fromHeight(90.0),
child: new Text('dddd'),
),
),
FutureBuilder<List<String>>(
future: getPosts(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return SliverList(
delegate: new SliverChildBuilderDelegate((BuildContext context, int index) {
return new Text(snapshot.data[index].toString());
},
childCount: snapshot.data.length),
);
} else {
return new SliverList(
delegate: SliverChildListDelegate(buildTextViews(50))
);
}
}
),
]),
);
}
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