SmartListView function

ScrollView SmartListView({
  1. Key? key,
  2. required IndexedWidgetBuilder itemBuilder,
  3. required dynamic itemCount,
  4. double dividerThickness = 0,
  5. Color dividerColor = Colors.transparent,
  6. double? cacheExtent,
  7. bool dividerEnd = false,
  8. bool dividerStart = false,
  9. Axis scrollDirection = Axis.vertical,
  10. IndexedWidgetBuilder? separatorBuilder,
  11. ScrollPhysics? physics,
  12. CollectGarbage? collectGarbage,
  13. ViewPortBuilder? viewportBuilder,
  14. bool shrinkWrap = false,
  15. bool useListView = false,
  16. ScrollController? scrollController,
})

Implementation

ScrollView SmartListView({
  Key? key,
  ///item渲染器
  required IndexedWidgetBuilder itemBuilder,
  ///数据个数
  required itemCount,
  ///分割线高度
  double dividerThickness = 0,
  ///分割线颜色
  Color dividerColor = Colors.transparent,
  ///缓存高度
  double? cacheExtent,
  ///是否包含开头分割线
  bool dividerEnd = false,
  ///是否包含结尾分割线
  bool dividerStart = false,
  ///滑动方向
  Axis scrollDirection = Axis.vertical,
  ///分割线渲染器
  IndexedWidgetBuilder? separatorBuilder,
  ///滑动模式
  ScrollPhysics? physics,
  ///列表元素回收
  CollectGarbage? collectGarbage,
  ///追踪进入 Viewport 的列表元素的 index(即你看到的可视区域,并不包括缓存距离)
  ViewPortBuilder? viewportBuilder,
  ///是否计算item尺寸
  bool shrinkWrap = false,
  ///是否使用Column
  bool useListView = false,
  ///滑动控制器
  ScrollController? scrollController,
}){

  bool hasDivider = _hasDivider(
      dividerThickness: dividerThickness,
      separatorBuilder: separatorBuilder
  );

  ///无分割线,使用普通的listview
  return ExtendedListView.custom(
    shrinkWrap: shrinkWrap,
    cacheExtent: cacheExtent,
    scrollDirection: scrollDirection,
    controller: scrollController,
    childrenDelegate: _getSliverChildDelegate(
        itemBuilder: itemBuilder,
        separatorBuilder: separatorBuilder,
        scrollDirection: scrollDirection,
        dividerStart: dividerStart,
        dividerEnd: dividerEnd,
        dividerColor: dividerColor,
        dividerThickness: dividerThickness,
        itemCount: itemCount
    ),
    extendedListDelegate: ExtendedListDelegate(
        collectGarbage: collectGarbage,
        viewportBuilder: (first, last){
          if(hasDivider){
            viewportBuilder?.call(first ~/ 2, last ~/ 2);
          }else{
            viewportBuilder?.call(first, last);
          }
        }
    ),
  );


}