buildContentView method

  1. @override
Widget buildContentView(
  1. BuildContext context,
  2. M model
)
override

绘制页面内容

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);
}