Flutter BoxDecoration 的背景色覆盖了 Container 的背景色,为啥?

Posted

技术标签:

【中文标题】Flutter BoxDecoration 的背景色覆盖了 Container 的背景色,为啥?【英文标题】:Flutter BoxDecoration’s background color overrides the Container's background color, why?Flutter BoxDecoration 的背景色覆盖了 Container 的背景色,为什么? 【发布时间】:2018-01-25 05:55:00 【问题描述】:

我有一个 Flutter Container 小部件,并为它定义了一种颜色(粉红色),但由于某种原因,BoxDecoration 中的颜色覆盖了它(绿色)。为什么?

new Container(
  color: Colors.pink,
  decoration: new BoxDecoration(
    borderRadius: new BorderRadius.circular(16.0),
    color: Colors.green,
  ),
);

【问题讨论】:

【参考方案1】:

Container 的 color 是 BoxDecoration 的 color 的简写,因此 Container 的 decoration 属性中 BoxDecoration 的 color 会覆盖其 Container 的 color

【讨论】:

我想为边框设置蓝色,为容器背景设置琥珀色,我该怎么做? 你可以这样实现decoration: BoxDecoration( color: Colors.yellow, border: Border.all(color: Theme.of(context).accentColor,) ),@Kamlesh【参考方案2】:

问题:

来自docs:

colordecoration 参数不能同时提供,因为这可能会导致装饰绘制在背景颜色之上。要为装饰提供颜色,请使用decoration: BoxDecoration(color: color)

源代码明确提到colordecoration 应该是null

assert(color == null || decoration == null,
'Cannot provide both a color and a decoration\n'
    'To provide both, use "decoration: BoxDecoration(color: color)".',
)

解决方案:

仅使用color:

Container(color: Colors.red)

仅使用decoration 并在此处提供color

Container(decoration: BoxDecoration(color: Colors.red))

【讨论】:

【参考方案3】:

Flutter 团队表示 BoxDecoration() 中的 color 属性经常用于将背景颜色应用于 Container 小部件。因此,他们在 Container 小部件中为颜色属性添加了单独的简写。所以,当我们在同一个 Container 小部件中同时使用 color 属性和 BoxDecoration() color 属性时,会抛出如下断言:

Cannot provide both a color and a decoration
The color argument is just a shorthand for "decoration: new BoxDecoration(color: color)".

【讨论】:

【参考方案4】:

color and decoration 参数不能同时提供,因为它可能会导致装饰绘制在背景颜色之上。要提供带有颜色的装饰,您可以使用以下代码。

decoration: BoxDecoration(color: Colors.red).

【讨论】:

已在其他答案中提及。当你有像Container(color: ...)这样的合法方式提供颜色时,为什么还要使用 BoxDecoration 对象。 请不要为了“编辑”而简单地编辑帖子,OP不会接受您复制的答案。

以上是关于Flutter BoxDecoration 的背景色覆盖了 Container 的背景色,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 Flutter 应用中添加渐变背景?

Flutter之Decoration(边框圆角阴影形状渐变背景图像等)

如何在 Flutter 中更改布局

container boxdecoration

Flutter Container:不能同时提供颜色和装饰

在 Flutter 错误中将 base64 转换为图像