buildContentView method
绘制页面内容
Implementation
@override
Widget buildContentView(BuildContext context, M model) {
List<Widget> slivers = [];
PreferredSize preferredSize = buildFixedHeader(model);
// 固顶 Header
var fixedHeader = SliverPersistentHeader(
pinned: true,
delegate: SliverAppBarDelegate(
minHeight: preferredSize.preferredSize.height,
maxHeight: preferredSize.preferredSize.height,
child: preferredSize.child,
),
);
slivers.add(fixedHeader);
// 中间 header
List<Widget> headerList = buildHeaders(model);
for (var header in headerList) {
slivers.add(SliverToBoxAdapter(child: header));
}
// 吸顶 header
var stickyHeader = buildStickyHeader(context, model);
if (stickyHeader != null) {
slivers.add(stickyHeader);
}
Widget sliverList;
if (itemHeight == null) {
sliverList = SliverList(
delegate: SliverChildBuilderDelegate(
_itemContainer,
childCount: model.dataListSize,
),
);
} else {
sliverList = SliverFixedExtentList(
itemExtent: itemHeight!,
delegate: SliverChildBuilderDelegate(
_itemContainer,
childCount: model.dataListSize,
),
);
}
slivers.add(sliverList);
List<Widget> footerList = buildFooters(model);
for (var footer in footerList) {
slivers.add(SliverToBoxAdapter(child: footer));
}
if (!model.hasMore) {
// 没有更多视图
slivers.add(SliverToBoxAdapter(child: buildNoMoreView(context, model)));
}
return CustomScrollView(controller: scrollController, slivers: slivers);
}