|
|
@@ -0,0 +1,32 @@ |
|
|
|
// 自定义 SliverPersistentHeaderDelegate |
|
|
|
import 'package:flutter/material.dart'; |
|
|
|
|
|
|
|
class CustomSliverPersistentHeaderDelegate extends SliverPersistentHeaderDelegate { |
|
|
|
final double max; // 最大高度 |
|
|
|
final double min; // 最小高度 |
|
|
|
final Widget child; // 需要展示的内容 |
|
|
|
|
|
|
|
CustomSliverPersistentHeaderDelegate({@required this.max, @required this.min, @required this.child}) |
|
|
|
// 如果 assert 内部条件不成立,会报错 |
|
|
|
: assert(max != null), |
|
|
|
assert(min != null), |
|
|
|
assert(child != null), |
|
|
|
assert(min <= max), |
|
|
|
super(); |
|
|
|
|
|
|
|
// 返回展示的内容,如果内容固定可以直接在这定义,如果需要可扩展,这边通过传入值来定义 |
|
|
|
@override |
|
|
|
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) => child; |
|
|
|
|
|
|
|
@override |
|
|
|
double get maxExtent => max; // 返回最大高度 |
|
|
|
|
|
|
|
@override |
|
|
|
double get minExtent => min; // 返回最小高度 |
|
|
|
|
|
|
|
@override |
|
|
|
bool shouldRebuild(CustomSliverPersistentHeaderDelegate oldDelegate) { |
|
|
|
// 是否需要更新,这里我们定义当高度范围和展示内容被替换的时候进行刷新界面 |
|
|
|
return max != oldDelegate.max || min != oldDelegate.min || child != oldDelegate.child; |
|
|
|
} |
|
|
|
} |