Files
sm-emby-share/lib/shared/widgets/frosted_panel.dart
T
2026-07-14 11:11:36 +08:00

68 lines
1.6 KiB
Dart

import 'dart:ui' show ImageFilter;
import 'package:flutter/material.dart';
class FrostedPanel extends StatelessWidget {
final Widget child;
final double radius;
final double blurSigma;
final bool enableBlur;
final EdgeInsetsGeometry padding;
final EdgeInsetsGeometry? margin;
final Color color;
final Gradient? gradient;
final BoxBorder? border;
final List<BoxShadow> boxShadow;
const FrostedPanel({
super.key,
required this.child,
this.radius = 24,
this.blurSigma = 18,
this.enableBlur = true,
this.padding = EdgeInsets.zero,
this.margin,
this.color = Colors.black26,
this.gradient,
this.border,
this.boxShadow = const <BoxShadow>[],
});
@override
Widget build(BuildContext context) {
final borderRadius = BorderRadius.circular(radius);
final content = DecoratedBox(
decoration: BoxDecoration(
color: gradient == null ? color : null,
gradient: gradient,
borderRadius: borderRadius,
border: border,
),
child: Padding(padding: padding, child: child),
);
return Padding(
padding: margin ?? EdgeInsets.zero,
child: DecoratedBox(
decoration: BoxDecoration(
borderRadius: borderRadius,
boxShadow: boxShadow,
),
child: ClipRRect(
borderRadius: borderRadius,
child: enableBlur
? BackdropFilter(
filter: ImageFilter.blur(
sigmaX: blurSigma,
sigmaY: blurSigma,
),
child: content,
)
: content,
),
),
);
}
}