Files
PiliPlus/lib/plugin/pl_player/widgets/app_bar_ani.dart
dom 94063ab1f9 opt ui
Signed-off-by: dom <githubaccount56556@proton.me>
2026-05-25 14:34:44 +08:00

65 lines
1.4 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: [
Colors.transparent,
Color(0xBF000000),
],
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: [
Colors.transparent,
Color(0xBF000000),
],
tileMode: .mirror,
);
@override
Widget build(BuildContext context) {
return SlideTransition(
position: controller.drive(isTop ? _topPos : _bottomPos),
child: DecoratedBox(
decoration: BoxDecoration(
gradient: isTop ? _topDecoration : _bottomDecoration,
),
child: ViewSafeArea(
left: isFullScreen,
right: isFullScreen,
child: child,
),
),
);
}
}