gpt4 book ai didi

flutter :自定义形状作为文本背景

转载 作者:行者123 更新时间:2023-12-04 17:19:58 27 4
gpt4 key购买 nike

我需要在 flutter 中实现这一点:

enter image description here

我尝试创建一个 Row 并为 Text 设置背景以处理矩形,然后为 ClipPath 设置三角形。这样做的问题是边缘不精确(您可以在下图中的矩形和三角形之间看到一条细线),而且 ClipPath 具有固定大小,所以如果我想更改某些时候的文字大小我将不得不再次微调三角形。

enter image description here

这是我的代码:

class TriangleClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.lineTo(0.0, size.height);
path.lineTo(size.width / 3, size.height);
path.close();
return path;
}

@override
bool shouldReclip(TriangleClipper oldClipper) => false;
}

Row(
children: [
Container(
color: Colors.orange,
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Text(
"a label",
),
),
),
ClipPath(
clipper: TriangleClipper(),
child: Container(
color: Colors.orange,
height: 23,
width: 20,
),
)
],
)

我虽然在 ClipPath 的子项中使用 double.infinity 而不是固定大小会解决它,但这样做会使三角形消失(可能它变得太大以至于我看不到它或落后于某些东西)。

解决这个问题的正确方法是什么?我想我可以使用 ClipPath 绘制梯形,但是如何使它的宽度适应 Text 的长度?

最佳答案

实现这一目标的一种方法是这样的。

class TriangleClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final w = size.width;
final h = size.height;
final triangleWidth = 10;

final path = Path();
path.lineTo(0, 0);
path.lineTo(0, h);
path.lineTo(w, h);
path.lineTo(w - triangleWidth, 0);
path.close();
return path;
}

@override
bool shouldReclip(TriangleClipper oldClipper) => false;
}

并像这样使用它。

ClipPath(
clipper: TriangleClipper(),
child: Container(
padding: EdgeInsets.fromLTRB(4, 4, 14, 4), // 4 + triangleWidth for right padding
color: Colors.orange,
child: Text('A label'),
),
),

关于 flutter :自定义形状作为文本背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66745841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com