您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
169 行
5.7 KiB
169 行
5.7 KiB
using System.Collections.Generic;
|
|
using Unity.UIWidgets.foundation;
|
|
using Unity.UIWidgets.material;
|
|
using Unity.UIWidgets.painting;
|
|
using Unity.UIWidgets.ui;
|
|
using Unity.UIWidgets.widgets;
|
|
using Image = Unity.UIWidgets.widgets.Image;
|
|
|
|
namespace UIWidgetsGallery.gallery {
|
|
class AnimationWidgetsUtils {
|
|
public const float kSectionIndicatorWidth = 32.0f;
|
|
}
|
|
|
|
public class SectionCard : StatelessWidget {
|
|
public SectionCard(
|
|
Key key = null,
|
|
Section section = null
|
|
) : base(key: key) {
|
|
D.assert(section != null);
|
|
this.section = section;
|
|
}
|
|
|
|
public readonly Section section;
|
|
|
|
public override Widget build(BuildContext context) {
|
|
return new DecoratedBox(
|
|
decoration: new BoxDecoration(
|
|
gradient: new LinearGradient(
|
|
begin: Alignment.centerLeft,
|
|
end: Alignment.centerRight,
|
|
colors: new List<Color> {
|
|
this.section.leftColor, this.section.rightColor
|
|
}
|
|
)
|
|
),
|
|
child: Image.asset(this.section.backgroundAsset,
|
|
color: Color.fromRGBO(255, 255, 255, 0.075f),
|
|
colorBlendMode: BlendMode.modulate,
|
|
fit: BoxFit.cover
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
public class SectionTitle : StatelessWidget {
|
|
public SectionTitle(
|
|
Key key = null,
|
|
Section section = null,
|
|
float? scale = null,
|
|
float? opacity = null
|
|
) : base(key: key) {
|
|
D.assert(section != null);
|
|
D.assert(scale != null);
|
|
D.assert(opacity != null && opacity >= 0.0f && opacity <= 1.0f);
|
|
this.section = section;
|
|
this.scale = scale;
|
|
this.opacity = opacity;
|
|
}
|
|
|
|
public readonly Section section;
|
|
public readonly float? scale;
|
|
public readonly float? opacity;
|
|
|
|
public static readonly TextStyle sectionTitleStyle = new TextStyle(
|
|
fontFamily: "Raleway",
|
|
inherit: false,
|
|
fontSize: 24.0f,
|
|
fontWeight: FontWeight.w500,
|
|
color: Colors.white,
|
|
textBaseline: TextBaseline.alphabetic
|
|
);
|
|
|
|
public static readonly TextStyle sectionTitleShadowStyle = sectionTitleStyle.copyWith(
|
|
color: new Color(0x19000000)
|
|
);
|
|
|
|
public override Widget build(BuildContext context) {
|
|
return new IgnorePointer(
|
|
child: new Opacity(
|
|
opacity: this.opacity ?? 1.0f,
|
|
child: new Transform(
|
|
transform: Matrix3.makeScale(this.scale ?? 1.0f),
|
|
alignment: Alignment.center,
|
|
child: new Stack(
|
|
children: new List<Widget> {
|
|
new Positioned(
|
|
top: 4.0f,
|
|
child: new Text(this.section.title, style: sectionTitleShadowStyle)
|
|
),
|
|
new Text(this.section.title, style: sectionTitleStyle)
|
|
}
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
public class SectionIndicator : StatelessWidget {
|
|
public SectionIndicator(Key key = null, float opacity = 1.0f) : base(key: key) {
|
|
this.opacity = opacity;
|
|
}
|
|
|
|
public readonly float opacity;
|
|
|
|
public override Widget build(BuildContext context) {
|
|
return new IgnorePointer(
|
|
child: new Container(
|
|
width: AnimationWidgetsUtils.kSectionIndicatorWidth,
|
|
height: 3.0f,
|
|
color: Colors.white.withOpacity(this.opacity)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
public class SectionDetailView : StatelessWidget {
|
|
public SectionDetailView(
|
|
Key key = null,
|
|
SectionDetail detail = null
|
|
) : base(key: key) {
|
|
D.assert(detail != null && detail.imageAsset != null);
|
|
D.assert((detail.imageAsset ?? detail.title) != null);
|
|
this.detail = detail;
|
|
}
|
|
|
|
public readonly SectionDetail detail;
|
|
|
|
public override Widget build(BuildContext context) {
|
|
Widget image = new DecoratedBox(
|
|
decoration: new BoxDecoration(
|
|
borderRadius: BorderRadius.circular(6.0f),
|
|
image: new DecorationImage(
|
|
image: new AssetImage(
|
|
this.detail.imageAsset
|
|
),
|
|
fit: BoxFit.cover,
|
|
alignment: Alignment.center
|
|
)
|
|
)
|
|
);
|
|
|
|
Widget item;
|
|
if (this.detail.title == null && this.detail.subtitle == null) {
|
|
item = new Container(
|
|
height: 240.0f,
|
|
padding: EdgeInsets.all(16.0f),
|
|
child: new SafeArea(
|
|
top: false,
|
|
bottom: false,
|
|
child: image
|
|
)
|
|
);
|
|
}
|
|
else {
|
|
item = new ListTile(
|
|
title: new Text(this.detail.title),
|
|
subtitle: new Text(this.detail.subtitle),
|
|
leading: new SizedBox(width: 32.0f, height: 32.0f, child: image)
|
|
);
|
|
}
|
|
|
|
return new DecoratedBox(
|
|
decoration: new BoxDecoration(color: Colors.grey.shade200),
|
|
child: item
|
|
);
|
|
}
|
|
}
|
|
}
|