我必须创建一个像this这样的Card,我已经编写了以下代码来实现所需的UI,但是它没有按预期工作,
Card(
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.only(
bottomRight: Radius.circular(10),
topRight: Radius.circular(10)),
side: BorderSide(width: 5, color: Colors.green)),
child: ListTile(),
)
上面的代码产生了this,而使用下面的代码
Card(
elevation: 5,
shape: Border(right: BorderSide(color: Colors.red, width: 5)),
child: ListTile(),
)
生成了this输出。如何在Flutter中创建所需的UI?
答案 0 :(得分:20)
在Card小部件中使用shape参数,例如:
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
child: Container() )
答案 1 :(得分:4)
我已经使用ClipPath来实现问题中提到的UI,请查看以下代码。
Card(
elevation: 2,
child: ClipPath(
child: Container(
height: 100,
decoration: BoxDecoration(
border: Border(right: BorderSide(color: Colors.green, width: 5))),
),
clipper: ShapeBorderClipper(shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3))),
),
)
如果有更好的方法达到上述结果,请回答。
答案 2 :(得分:1)
您应将Card
放在ClipRRect
小部件内:
return ClipRRect(
borderRadius: BorderRadius.circular(15.0),
child: Card(
elevation: 5,
shape: Border(right: BorderSide(color: Colors.red, width: 5)),
child: ListTile(),
),
);
但是我建议您减小elevation
的值,因为它会使小的圆形边界变形。
答案 3 :(得分:1)
对我来说,所有使用裁剪的解决方案都消除了一些阴影。无论如何,我找到了一个更简单的imo解决方案:
将卡片的子代包装在Container小部件周围。为卡片指定圆角矩形边框,然后为容器指定彩色边框。
Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
child: Container(
decoration: BoxDecoration(
border: Border(right: BorderSide(color: Colors.red, width: 8)
),
child: // your card content
)
)
答案 4 :(得分:1)
您可以通过以下方式实现此目的:使用shape
属性并在RoundedRectangleBorder
内分配Card
类,然后在side
中添加RoundedRectangleBorder
属性
BorderSide
,用于描述盒子的每一面。
Container(
padding: const EdgeInsets.only(right: 8.0, left: 8.0),
height: 60,
child: Card(
elevation: 2,
shape: RoundedRectangleBorder(
side: BorderSide(color: appThemeColor.shade200, width: 0.5),
borderRadius: BorderRadius.circular(5)),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: Radius.circular(15),
bottomRight: Radius.circular(15)),
color: Colors.deepPurple,
),
width: 5,
),
],
),
),
)
答案 5 :(得分:0)
此解决方案对我有用。如果我们从卡中删除shape
属性,则该属性会留下矩形的白色角。 elevation
不受任何限制。
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
shadowColor: Colors.blueAccent,
elevation: 15,
child: ClipPath(
clipper: ShapeBorderClipper(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15))),
child: Container(
height: 180,
decoration: BoxDecoration(
border: Border(
left: BorderSide(color: Colors.red, width: 15)),
color: Colors.yellowAccent.shade100,
),
padding: EdgeInsets.all(20.0),
alignment: Alignment.centerLeft,
child: Container()),
),
)
答案 6 :(得分:0)
我只是在 paresh's answer 上添加了 IntrinsicHeight
和 CrossAxisAlignment.stretch
,因此右边框的高度被拉伸。
Container(
child: Card(
elevation: 2,
shape: RoundedRectangleBorder(
side: BorderSide(color: Colors.green, width: 0.5),
borderRadius: BorderRadius.circular(5)),
//Wrap with IntrinsicHeight
child: IntrinsicHeight(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
//Add CrossAxisAlignment.stretch
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Text("Text 1"),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Text("Text 2"),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Text("Text 3"),
),
],
),
),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: Radius.circular(15),
bottomRight: Radius.circular(15)),
color: Colors.green,
),
width: 5,
),
],
),
),
))