ath*_*hor 4 flutter flutter-layout
我正在尝试在 Flutter 中构建以下布局。
我希望实现两件事:
有任何想法吗?
小智 5
这是我的代码:
Stack(
children: <Widget>[
Pic(),
Info(),
],
)
Run Code Online (Sandbox Code Playgroud)
对于小部件图片:
Container(
decoration: BoxDecoration(
image: DecorationImage(
alignment: Alignment.centerRight,
fit: BoxFit.fitHeight,
image: NetworkImage(
'https://media.sproutsocial.com/uploads/2014/02/Facebook-Campaign-Article-Main-Image2.png'),
),
),
)
Run Code Online (Sandbox Code Playgroud)
对于小部件信息:
ClipPath(
clipper: TrapeziumClipper(),
child: Container(
color: Colors.white,
padding: EdgeInsets.all(8.0),
width: MediaQuery.of(context).size.width * 3/5,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
ConstrainedBox(
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * 6/15
),
child: Text(
'Testing clipping with soft wrap',
softWrap: true,
style: Theme.of(context).textTheme.title,
),
),
],
),
),
)
Run Code Online (Sandbox Code Playgroud)
对于 TrapeziumClipper:
class TrapeziumClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.lineTo(size.width * 2/3, 0.0);
path.lineTo(size.width, size.height);
path.lineTo(0.0, size.height);
path.close();
return path;
}
@override
bool shouldReclip(TrapeziumClipper oldClipper) => false;
}
Run Code Online (Sandbox Code Playgroud)
有多种方法可以做到这一点。一种方法是使用 CustomPainter 将其用作背景并让它绘制粉红色+图片。
另一种方法是使用堆栈,如下所示:
container (with pink background)
-> stack
-> picture, clipped
-> text, etc
Run Code Online (Sandbox Code Playgroud)
您可以按照通常的方式布置文本,并将图片向右对齐并定义一个ClipPath,根据您的需要对其进行剪辑。
要使文本换行,请将其放入ConstrainedBox或SizedBox中,并确保将其设置为换行(我相信是 softwrap 属性)。
| 归档时间: |
|
| 查看次数: |
6271 次 |
| 最近记录: |