Skip to content

Instantly share code, notes, and snippets.

@ampersanda
Last active January 20, 2020 09:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ampersanda/6b61ef53668f1a91912a41cc89caf446 to your computer and use it in GitHub Desktop.
Save ampersanda/6b61ef53668f1a91912a41cc89caf446 to your computer and use it in GitHub Desktop.
delegate of SliverPersistentHeader
SliverPersistentHeader(
delegate: SliverAppBarDelegate((context, _, __, progress) => HistoryPersistentHeaderTile(),
collapsedHeight: Dimensions.fixedHeaderHeight,
expandedHeight: Dimensions.fixedHeaderHeight),
pinned: true),
import 'dart:math' as math;
import 'package:flutter/widgets.dart';
class SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
SliverAppBarDelegate(this.builder,
{@required this.collapsedHeight,
@required this.expandedHeight,
this.reverseProgress = false,
this.limitMinimumToZero = true,
this.limitMaximumToOne = true});
final double expandedHeight;
final double collapsedHeight;
final bool reverseProgress, limitMinimumToZero, limitMaximumToOne;
final Widget Function(BuildContext context, double shrinkOffset,
bool overlapsContent, double progress) builder;
@override
double get minExtent => collapsedHeight;
@override
double get maxExtent => math.max(expandedHeight, minExtent);
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return builder(
context,
shrinkOffset,
overlapsContent,
reverseProgress
? 1.0 - (shrinkOffset / maxExtent)
: (shrinkOffset / maxExtent));
}
@override
bool shouldRebuild(SliverAppBarDelegate oldDelegate) {
return expandedHeight != oldDelegate.expandedHeight ||
collapsedHeight != oldDelegate.collapsedHeight;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment