记录一个思路,后续逐步完善
import 'package:flutter/material.dart';
class UIContainer extends Container {
UIContainer({
Key key,
Widget child,
double width,
double height,
AlignmentGeometry alignment,
Color backgroundColor = const Color(0xffffffff),
BoxBorder border,
BorderRadiusGeometry borderRadius,
Gradient backgroundGradient,
List<BoxShadow> boxShadow,
DecorationImage image,
Color foregroundColor,
Gradient foregroundGradient,
BoxConstraints constraints,
EdgeInsetsGeometry margin,
EdgeInsetsGeometry padding,
Matrix4 transform,
AlignmentGeometry transformAlignment,
Clip clipBehavior = Clip.none,
}) : super(
key: key,
alignment: alignment,
width: width,
height: height,
decoration: BoxDecoration(
color: backgroundColor,
image: image,
gradient: backgroundGradient,
borderRadius: borderRadius,
border: border,
boxShadow: boxShadow
),
foregroundDecoration: BoxDecoration(
color: foregroundColor,
gradient: foregroundGradient,
),
constraints: constraints,
margin: margin,
padding: padding,
transform: transform,
transformAlignment: transformAlignment,
child: child,
clipBehavior: clipBehavior
);
static UIContainer defView({
Key key,
Widget child,
double width,
double height,
double radius,
Color backgroundColor,
Color borderColor,
double borderWidth,
double padding,
double margin,
bool showShadow = false,
Clip clipBehavior
}) {
return UIContainer(
key: key,
child: child,
borderRadius: BorderRadius.circular(radius ?? 10),
backgroundColor: backgroundColor ?? Colors.white,
width: width,
height: height,
padding: padding == null ? null : EdgeInsets.all(padding),
margin: margin == null ? null : EdgeInsets.all(margin),
boxShadow: showShadow ? [
BoxShadowExt.defShadow()
] : null,
border: borderColor == null && borderWidth == null ? null : Border.all(
color: borderColor ?? Colors.grey,
width: borderWidth ?? 1,
),
clipBehavior: clipBehavior ?? (radius == null ? Clip.none : Clip.hardEdge),
);
}
}
extension BoxShadowExt on BoxShadow {
static BoxShadow defShadow({Color color, Offset offset, double blurRadius}) {
return BoxShadow(
color: color ?? Color(0xe1e3e4e9),
offset: offset ?? Offset.zero,
blurRadius: blurRadius ?? 8.0
);
}
}