您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

133 行
4.6 KiB

using UIWidgets.foundation;
using UIWidgets.rendering;
using UIWidgets.painting;
namespace UIWidgets.widgets {
public class DecoratedBox : SingleChildRenderObjectWidget {
public DecoratedBox(
Decoration decoration,
Widget child,
Key key = null,
DecorationPosition position = DecorationPosition.background
) : base(key, child) {
this.position = position;
this.decoration = decoration;
}
public Decoration decoration;
public DecorationPosition position;
public override RenderObject createRenderObject(BuildContext context) {
return new RenderDecoratedBox(
decoration: decoration,
position: position,
configuration: ImageUtil.createLocalImageConfiguration(context)
);
}
public override void updateRenderObject(BuildContext context, RenderObject renderObject) {
((RenderDecoratedBox) renderObject).decoration = decoration;
((RenderDecoratedBox) renderObject).configuration = ImageUtil.createLocalImageConfiguration(context);
((RenderDecoratedBox) renderObject).position = position;
}
}
public class Container : StatelessWidget {
// todo transform
public Container(
Key key = null,
Alignment alignment = null,
EdgeInsets padding = null,
ui.Color color = null,
Decoration decoration = null,
Decoration forgroundDecoration = null,
double width = 0.0,
double height = 0.0,
BoxConstraints constraints = null,
EdgeInsets margin = null,
// Matrix4x4 transfrom = default(Matrix4x4),
Widget child = null
) : base(key) {
this.alignment = alignment;
this.foregroundDecoration = forgroundDecoration;
// this.transform = transfrom;
this.margin = margin;
this.child = child;
this.padding = padding;
this.decoration = decoration ?? (color != null ? new BoxDecoration(color) : null);
this.constraints = (width != 0.0 || height != 0.0)
? ((constraints == null ? null : constraints.tighten(width, height))
?? BoxConstraints.tightFor(width, height))
: constraints;
}
public Widget child;
public Alignment alignment;
public EdgeInsets padding;
public Decoration decoration;
public Decoration foregroundDecoration;
public BoxConstraints constraints;
public EdgeInsets margin;
// public Matrix4x4 transform;
EdgeInsets _paddingIncludingDecoration {
get {
if (decoration == null || decoration.padding == null)
return padding;
EdgeInsets decorationPadding = decoration.padding;
if (padding == null)
return decorationPadding;
return padding.add(decorationPadding);
}
}
public override Widget build(BuildContext context) {
Widget current = child;
if (child == null && (constraints == null || !constraints.isTight)) {
current = new LimitedBox(
maxWidth: 0.0,
maxHeight: 0.0,
child: new ConstrainedBox(constraints: BoxConstraints.expand())
);
}
if (alignment != null) {
current = new Align(alignment: alignment, child: current);
}
EdgeInsets effetivePadding = _paddingIncludingDecoration;
if (effetivePadding != null) {
current = new Padding(padding: effetivePadding, child: current);
}
if (decoration != null) {
current = new DecoratedBox(decoration: decoration, child: current);
}
if (foregroundDecoration != null) {
current = new DecoratedBox(
decoration: decoration,
position: DecorationPosition.foreground,
child: current
);
}
if (constraints != null) {
current = new ConstrainedBox(constraints: constraints, child: current);
}
if (margin != null) {
current = new Padding(padding: margin, child: current);
}
// if (transform != null) {
// current = new Transform(transform: transform, child: current);
// }
return current;
}
}
}