我如何使用 Flutter 制作带有这种装饰的容器
How can i make a container with this kind of decoration using Flutter
Please see image。我不太关心容器的 child 。只是装饰。我正在尝试实现黄色背景和右上角的复选图标。到目前为止,我只能制作容器并为其设置边框颜色。
到目前为止,这是我的 Container
:
代码
Container(
height: 50,
width: 90,
decoration: BoxDecoration(
border: Border.all(color:Colors.yelloAccent[100]),
borderRadius: BorderRadius.all(Radius.circular(5),
),
color: color,
),
child: Center(child: Text(text, style: TextStyle(fontSize: 12, color: textColor, fontWeight: FontWeight.w900))),
);
您可以借助 Stack
小部件轻松创建它。
可以通过旋转 Container
小部件并调整其位置来创建右上角的三角形。这可以通过 Positioned
& Transform
小部件来实现。
最后,复选标记图标可以放在三角形顶部的另一个 Positioned
小部件中。
在这里,这段代码可能会对您有所帮助:
return Stack(
children: [
// The actual container with border
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(4),
border: Border.all(color: Colors.amber, width: 2),
),
padding: const EdgeInsets.symmetric(horizontal:36, vertical: 24),
child: Text(
'Payment',
style: const TextStyle(
color: Colors.black87,
),
),
),
// The top right triangular shape
Positioned(
top: -20,
right: -80,
child: Transform.rotate(
angle: pi / 4,
child: Container(
color: Colors.amber,
height: 50,
width: 150,
),),
),
// The Icon
Positioned(
top: -4,
right: -8,
child: Icon(Icons.done, color: Colors.white),
),
],
);
Please see image。我不太关心容器的 child 。只是装饰。我正在尝试实现黄色背景和右上角的复选图标。到目前为止,我只能制作容器并为其设置边框颜色。
到目前为止,这是我的 Container
:
Container(
height: 50,
width: 90,
decoration: BoxDecoration(
border: Border.all(color:Colors.yelloAccent[100]),
borderRadius: BorderRadius.all(Radius.circular(5),
),
color: color,
),
child: Center(child: Text(text, style: TextStyle(fontSize: 12, color: textColor, fontWeight: FontWeight.w900))),
);
您可以借助 Stack
小部件轻松创建它。
可以通过旋转 Container
小部件并调整其位置来创建右上角的三角形。这可以通过 Positioned
& Transform
小部件来实现。
最后,复选标记图标可以放在三角形顶部的另一个 Positioned
小部件中。
在这里,这段代码可能会对您有所帮助:
return Stack(
children: [
// The actual container with border
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(4),
border: Border.all(color: Colors.amber, width: 2),
),
padding: const EdgeInsets.symmetric(horizontal:36, vertical: 24),
child: Text(
'Payment',
style: const TextStyle(
color: Colors.black87,
),
),
),
// The top right triangular shape
Positioned(
top: -20,
right: -80,
child: Transform.rotate(
angle: pi / 4,
child: Container(
color: Colors.amber,
height: 50,
width: 150,
),),
),
// The Icon
Positioned(
top: -4,
right: -8,
child: Icon(Icons.done, color: Colors.white),
),
],
);