Files
2026-09-15 15:44:13 +07:00

50 lines
1.3 KiB
Dart

import 'dart:math';
import 'package:flutter/widgets.dart';
class MySliverDelegate extends SliverPersistentHeaderDelegate {
final double? maxHeight;
final double? minHeight;
final Widget? child;
final bool? forceRefresh; //是否需要强制刷新
// double? shrinkOffset;
final Widget Function(
BuildContext context,
double shrinkOffset,
bool overlapsContent,
Widget? child,
)? childBuildHandler;
Function(double)? callTop;
MySliverDelegate({
required this.maxHeight,
required this.minHeight,
this.child,
this.childBuildHandler,
this.forceRefresh = false,
this.callTop,
});
@override
Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
if (callTop != null) callTop!(shrinkOffset);
if (childBuildHandler == null) {
return SizedBox.expand(
child: child,
);
}
return childBuildHandler!(context, shrinkOffset, overlapsContent, child);
}
@override
double get maxExtent => max(maxHeight!, minHeight!);
@override
double get minExtent => minHeight!;
@override
bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) {
return (forceRefresh ?? false) ? true : maxHeight != oldDelegate.maxExtent || minHeight != oldDelegate.minExtent;
}
}