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

90 行
3.3 KiB

using Unity.UIWidgets.foundation;
using Unity.UIWidgets.painting;
using Unity.UIWidgets.rendering;
using Unity.UIWidgets.ui;
using TextStyle = Unity.UIWidgets.painting.TextStyle;
namespace Unity.UIWidgets.widgets {
public class Icon : StatelessWidget {
public Icon(
IconData icon,
Key key = null,
float? size = null,
Color color = null,
TextDirection? textDirection = null
) : base(key: key) {
this.icon = icon;
this.size = size;
this.color = color;
this.textDirection = textDirection;
}
public readonly IconData icon;
public readonly float? size;
public readonly Color color;
public readonly TextDirection? textDirection;
public override Widget build(BuildContext context) {
D.assert(this.textDirection != null || WidgetsD.debugCheckHasDirectionality(context));
TextDirection textDirection = this.textDirection ?? Directionality.of(context);
IconThemeData iconTheme = IconTheme.of(context);
float iconSize = size ?? iconTheme.size.Value;
if (icon == null) {
return new SizedBox(width: iconSize, height: iconSize);
}
float iconOpacity = iconTheme.opacity.Value;
Color iconColor = color ?? iconTheme.color;
if (iconOpacity != 1.0) {
iconColor = iconColor.withOpacity(iconColor.opacity * iconOpacity);
}
Widget iconWidget = new RichText(
overflow: TextOverflow.visible, // Never clip.
textDirection: textDirection, // Since we already fetched it for the assert...
text: new TextSpan(
text: new string(new[] {(char) icon.codePoint}),
style: new TextStyle(
inherit: false,
color: iconColor,
fontSize: iconSize,
fontFamily: icon.fontFamily
)
)
);
var matrix = Matrix4.identity();
matrix.scale(-1.0f, 1.0f, 1.0f);
if (icon.matchTextDirection) {
switch (textDirection) {
case TextDirection.rtl:
iconWidget = new Transform(
transform: matrix,
alignment: Alignment.center,
transformHitTests: false,
child: iconWidget
);
break;
case TextDirection.ltr:
break;
}
}
return new SizedBox(
width: iconSize,
height: iconSize,
child: new Center(
child: iconWidget
)
);
}
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
base.debugFillProperties(properties);
properties.add(new IconDataProperty("icon", icon, ifNull: "<empty>", showName: false));
properties.add(new FloatProperty("size", size, defaultValue: null));
properties.add(new ColorProperty("color", color, defaultValue: null));
}
}
}