55 lines
1.4 KiB
Dart
55 lines
1.4 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'dart:ui';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import '../theme/app_colors.dart';
|
|
import '../theme/app_dimens.dart';
|
|
|
|
/// 首页信息卡与浮层控件使用的浅色玻璃面板。
|
|
class GlassPanel extends StatelessWidget {
|
|
const GlassPanel({
|
|
super.key,
|
|
required this.child,
|
|
this.radius = AppDimens.glassRadius,
|
|
this.blur = 10,
|
|
this.padding,
|
|
this.borderColor = AppColors.glassBorder,
|
|
this.gradient,
|
|
});
|
|
|
|
final Widget child;
|
|
final double radius;
|
|
final double blur;
|
|
final EdgeInsetsGeometry? padding;
|
|
final Color borderColor;
|
|
final Gradient? gradient;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final borderRadius = BorderRadius.circular(radius);
|
|
final surface = DecoratedBox(
|
|
decoration: BoxDecoration(
|
|
borderRadius: borderRadius,
|
|
border: Border.all(color: borderColor),
|
|
gradient:
|
|
gradient ??
|
|
const LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [Color(0xE6FFFFFF), Color(0xB3FFFDFB)],
|
|
),
|
|
),
|
|
child: Padding(padding: padding ?? EdgeInsets.zero, child: child),
|
|
);
|
|
return ClipRRect(
|
|
borderRadius: borderRadius,
|
|
child: BackdropFilter(
|
|
filter: ImageFilter.blur(sigmaX: blur, sigmaY: blur),
|
|
child: surface,
|
|
),
|
|
);
|
|
}
|
|
}
|