Files
PiliPlus/lib/plugin/pl_player/widgets/app_bar_ani.dart
dom 0b1f6c4d0e tweaks
Signed-off-by: dom <githubaccount56556@proton.me>
2026-01-21 13:38:10 +08:00

67 lines
1.5 KiB
Dart

import 'package:PiliPlus/common/widgets/view_safe_area.dart';
import 'package:flutter/material.dart';
class AppBarAni extends StatelessWidget {
const AppBarAni({
super.key,
required this.child,
required this.controller,
required this.isTop,
required this.isFullScreen,
});
final Widget child;
final AnimationController controller;
final bool isTop;
final bool isFullScreen;
static final _topPos = Tween<Offset>(
begin: const Offset(0.0, -1.0),
end: Offset.zero,
);
static const _topDecoration = LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: <Color>[
Colors.transparent,
Color(0xBF000000),
],
tileMode: TileMode.mirror,
);
static final _bottomPos = Tween<Offset>(
begin: const Offset(0, 1.2),
end: Offset.zero,
);
static const _bottomDecoration = LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: <Color>[
Colors.transparent,
Color(0xBF000000),
],
tileMode: TileMode.mirror,
);
@override
Widget build(BuildContext context) {
return SlideTransition(
position: isTop
? controller.drive(_topPos)
: controller.drive(_bottomPos),
child: DecoratedBox(
decoration: BoxDecoration(
gradient: isTop ? _topDecoration : _bottomDecoration,
),
child: ViewSafeArea(
left: isFullScreen,
right: isFullScreen,
child: child,
),
),
);
}
}