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

138 行
5.3 KiB

using System.Collections.Generic;
using Unity.UIWidgets.foundation;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.rendering;
using Unity.UIWidgets.ui;
namespace Unity.UIWidgets.widgets {
public delegate Widget SliverLayoutWidgetBuilder(BuildContext context, SliverConstraints constraints) ;
public class SliverLayoutBuilder : ConstrainedLayoutBuilder<SliverConstraints> {
public SliverLayoutBuilder(
Key key = null,
ConstraintBuilder builder = null
) : base(key: key, builder: builder) {
}
public static SliverLayoutBuilder Creat(
Key key = null,
SliverLayoutWidgetBuilder builder = null
) {
ConstraintBuilder _builder = (context, constraints) => {
return builder(context, (SliverConstraints)constraints);
};
return new SliverLayoutBuilder(key,_builder);
}
public new SliverLayoutWidgetBuilder builder {
get {
//return base.builder;
SliverLayoutWidgetBuilder _builder = (context, constraints) => {
return base.builder(context, (SliverConstraints) constraints);
};
return _builder;
}
}
public override RenderObject createRenderObject(BuildContext context) {
return new _RenderSliverLayoutBuilder();
}
}
public class _RenderSliverLayoutBuilder : RenderConstrainedLayoutBuilderMixinRenderSliver<SliverConstraints, RenderSliver> {
public override float? childMainAxisPosition(RenderObject child) {
D.assert(child != null);
D.assert(child == this.child);
return 0;
}
protected override void performLayout() {
layoutAndBuildChild();
child?.layout(constraints, parentUsesSize: true);
geometry = child?.geometry ?? SliverGeometry.zero;
}
public override void applyPaintTransform(RenderObject child, Matrix4 transform) {
D.assert(child != null);
D.assert(child == this.child);
}
public override void paint(PaintingContext context, Offset offset) {
if (child?.geometry?.visible == true)
context.paintChild(child, offset);
}
protected override bool hitTestChildren(SliverHitTestResult result,float mainAxisPosition = 0f, float crossAxisPosition = 0f) {
return child != null
&& child.geometry.hitTestExtent > 0
&& child.hitTest(result, mainAxisPosition: mainAxisPosition, crossAxisPosition: crossAxisPosition);
}
public bool debugValidateChild(RenderObject child) {
D.assert(() => {
if (!(child is RenderSliver)) {
throw new UIWidgetsError(
new List<DiagnosticsNode>() {
new ErrorSummary(
$"A {GetType()} expected a child of type {typeof(RenderSliver)} but received a " +
$"child of type {child.GetType()}."
),
new ErrorDescription(
"RenderObjects expect specific types of children because they " +
"coordinate with their children during layout and paint. For " +
"example, a RenderSliver cannot be the child of a RenderBox because " +
"a RenderSliver does not understand the RenderBox layout protocol."
),
new ErrorSpacer(),
new DiagnosticsProperty<object>(
$"The {GetType()} that expected a {typeof(RenderSliver)} child was created by",
debugCreator,
style: DiagnosticsTreeStyle.errorProperty
),
new ErrorSpacer(),
new DiagnosticsProperty<dynamic>(
$"The {child.GetType()} that did not match the expected child type " +
"was created by",
child.debugCreator,
style: DiagnosticsTreeStyle.errorProperty
),
}
);
}
return true;
});
return true;
}
internal RenderSliver _child;
public RenderSliver child {
get { return _child; }
set {
if (_child != null) {
dropChild(_child);
}
_child = value;
if (_child != null) {
adoptChild(_child);
}
}
}
public LayoutCallback<SliverConstraints> _callback { get; set; }
public void updateCallback(LayoutCallback<SliverConstraints> value) {
if (value == _callback)
return;
_callback = value;
markNeedsLayout();
}
public void layoutAndBuildChild() {
D.assert(_callback != null);
invokeLayoutCallback(_callback);
}
}
}