边框半径不适用于子级内部Container。尝试了SizedBox&Stack小部件。我需要容器内的边框视图。
Scaffold(
appBar: AppBar(
title: new Text("ListView"),
),
body: Center(
child: Padding(
padding: EdgeInsets.all(15.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15.0),
border: Border.all(
color: Colors.green,
width: 2.0
)
),
child: Container(
color: Colors.red,
)
),
)
)
)
Run Code Online (Sandbox Code Playgroud)
Ste*_*wie 68
其他答案已经指出您需要使用ClipRRect将边框半径应用于 的子小部件Container。
但是,Container小部件现在具有clipBehaviour剪辑其子级的属性:
Container(
// Add the line below
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15.0),
border: Border.all(color: Colors.green, width: 2.0)),
child: Container(
color: Colors.red,
),
);
Run Code Online (Sandbox Code Playgroud)
使用此属性而不是嵌套小部件以获得干净的代码是一个很好的做法。
Raj*_*dav 34
试试这个,使用ClipRRect并嵌套在另一个中Container,现在您可以添加非统一边框
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
boxShadow: [BoxShadow(color: Colors.black12, blurRadius: 5)],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
border: Border(
left: BorderSide(color: Colors.indigo, width: 5),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Icon(Icons.home),
Text("Home"),
],
),
),
),
)
Run Code Online (Sandbox Code Playgroud)
小智 17
代替
容器
小部件使用
剪辑矩形
之前(不工作):
Center(
child: Container(
decoration: BoxDecoration(
borderRadius: _getAllRoundedBorderRadius(),
),
child: Hero(
tag: "CossackHero",
child: TweenImage(
last: AssetImage("images/background/cossack_0.jpg"),
first: AssetImage("images/background/c_cossack_0.jpg"),
duration: 2,
height: height,
),
),
),
),
Run Code Online (Sandbox Code Playgroud)
后:
Center(
child: ClipRRect(
borderRadius: getAllRoundedBorderRadius(),
child: Hero(
tag: "CossackHero",
child: TweenImage(
last: AssetImage("images/background/cossack_0.jpg"),
first: AssetImage("images/background/c_cossack_0.jpg"),
duration: 2,
height: height,
),
),
),
),
Run Code Online (Sandbox Code Playgroud)
Har*_*sad 15
decoration被画在孩子身后。如果要将装饰应用在容器的孩子面前,请使用foregroundDecoration
Scaffold(
appBar: AppBar(
title: new Text("ListView"),
),
body: Center(
child: Padding(
padding: EdgeInsets.all(15.0),
child: Container(
foregroundDecoration: BoxDecoration(
borderRadius: BorderRadius.circular(15.0),
border: Border.all(
color: Colors.green,
width: 2.0
)
),
child: Container(
color: Colors.red,
)
),
)
)
)
Run Code Online (Sandbox Code Playgroud)
上面的代码在子容器前面绘制边框。请注意,即使有foregroundDecoration子容器也会有尖角。
如果您希望子容器具有圆角,则您需要应用于borderRadius子容器或使用ClipRRect与父容器相同的边框半径
const innerRadius = 15.0;
const borderWidth = 2.0;
const borderColor = Colors.green;
const color = Colors.red;
const size = 100.0;
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(innerRadius + borderWidth),
color: borderColor,
),
padding: EdgeInsets.all(borderWidth),
child: ClipRRect(
borderRadius: BorderRadius.circular(innerRadius),
child: Container(
color: color,
width: size,
height: size,
),
),
);
Run Code Online (Sandbox Code Playgroud)
它看起来是这样的:
以及它是如何工作的:https://codepen.io/mshibanami/pen/LYyQJXa
顺便说一句,一些答案建议您使用Container包含以下内容decoration的答案:bordercolor
Container(
width: size,
height: size,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(innerRadius),
border: Border.all(
color: borderColor,
width: borderWidth,
),
color: color,
),
)
Run Code Online (Sandbox Code Playgroud)
还可以,但并不理想,因为内部颜色稍微超出边框。所以当边框接近背景颜色时,它可能会像这样突出:
截屏:
与ClipRRect(使用 2 Container)
ClipRRect(
borderRadius: BorderRadius.circular(16),
child: Container(
width: 100,
height: 100,
color: Colors.black,
child: Container(
margin: EdgeInsets.all(8),
color: Colors.blue,
),
),
)
Run Code Online (Sandbox Code Playgroud)
没有ClipRRect(使用 1 Container)
Container(
width: 100,
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16),
border: Border.all(
color: Colors.black,
width: 4,
),
color: Colors.blue,
),
)
Run Code Online (Sandbox Code Playgroud)
用这个替换你的代码
Scaffold(
appBar: AppBar(
title: new Text("ListView"),
),
body: Center(
child: Padding(
padding: EdgeInsets.all(15.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15.0),
border: Border.all(
color: Colors.green,
width: 2.0
)
),
child: Container(
decoration: new BoxDecoration(borderRadius:
BorderRadius.circular(15.0),
color: Colors.red,),
)
),
)
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6869 次 |
| 最近记录: |