如果您需要这样的东西,请按照以下步骤操作。
版块和新闻故事小部件。
class Section extends State {
@override
Widget build(BuildContext context) {
return MultiSliver(
pushPinnedChildren: true,
children: <Widget>[
SliverPersistentHeader(
pinned: true,
...
),
if (!infinite)
SliverAnimatedPaintExtent(
child: SliverList(...),
)
else
SliverList(...),
],
);
}
}
class NewsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
Section(infinite: false),
Section(infinite: true),
],
);
}
}
列出 Sliver 实现。
class NewsPage extends StatelessWidget {
const NewsPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
Strings.of(context).pages.news.title,
),
),
body: View<NewsModel>(
onModelReady: (model) => model.load(),
builder: (context, model, _) {
return Scrollbar(
child: CustomScrollView(
slivers: [
CupertinoSliverRefreshControl(
onRefresh: () => model.load(),
),
NewsSection(
model: model.topStories,
infinite: false,
),
NewsSection(
model: model.newStories,
infinite: true,
),
SliverToBoxAdapter(
child: SizedBox(height: MediaQuery.of(context).viewPadding.bottom),
),
],
),
);
},
),
);
}
}
Complete Implementation can be found here.