您可以使用以下命令创建自定义条子应用栏SliverPersistentHeaderDelegate
, 你会得到shrinkOffset
可用于为应用栏元素设置动画。
Run on dartPad https://dartpad.dev/?id=b7861e5ef83db7a3ad0f04e3a0cdb81d
更换你的SliverAppBar
有了这个
SliverPersistentHeader(
pinned: true,
delegate: MySliverHeaderDelegate(onActionTap: () {
debugPrint("on Tap");
}),
),
并定制SliverHeaderDelegate
class MySliverHeaderDelegate extends SliverPersistentHeaderDelegate {
final double _maxExtent = 160;
final VoidCallback onActionTap;
MySliverHeaderDelegate({
required this.onActionTap,
});
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
debugPrint(shrinkOffset.toString());
return Container(
color: Colors.cyanAccent,
child: Stack(
children: [
Align(
alignment: Alignment(
//little padding
-(shrinkOffset > _maxExtent - 20
? _maxExtent - 20
: shrinkOffset) /
_maxExtent,
0),
child: const Text('Panahon'),
),
// here provide actions
Positioned(
top: 0,
right: 0,
child: IconButton(
icon: const Icon(Icons.search),
onPressed: onActionTap,
),
),
],
),
);
}
@override
double get maxExtent => _maxExtent;
@override
double get minExtent => kToolbarHeight;
@override
bool shouldRebuild(covariant MySliverHeaderDelegate oldDelegate) {
return oldDelegate != this;
}
}