Flutter BoxDecoration’s background color overrides the Container’s background color, why?

In Flutter, when using a Container widget to display content, it is common practice to use the color property to set the background color of the container. However, if you also try to use the decoration property to add a BoxDecoration with its own background color, the Container’s background color will be overridden by the BoxDecoration’s background color. But why is this happening?

The Short Answer: Color Shorthand

The reason behind this behavior lies in how Flutter handles the color and decoration properties on a Container widget. As it turns out, when you use the color property on a Container, it is actually shorthand for setting the color of the BoxDecoration using the Decoration class.


Container(
  color: Colors.red
)

This is equivalent to:


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

The Problem: Using Color and Decoration Together

Now, let’s talk about the problem. You see, when you try to use both color and decoration on a Container widget at the same time, Flutter throws an error. And it’s not just a simple warning or an exception; it’s actually an explicit statement from the Flutter documentation that this is not allowed.

According to the docs:

The color and decoration arguments cannot both be supplied, since it would potentially result in the decoration drawing over the background color. To supply a decoration with a color, use decoration: BoxDecoration(color: color).

The Solutions

So, what can you do when faced with this situation? Well, there are two main solutions:

1. Use Only Color

One option is to simply drop the decoration and use only the color property. This will set the background color of your Container widget without any issues.


Container(
  color: Colors.red
)

2. Use Only Decoration with Color

The other option is to use the decoration property and specify a BoxDecoration with its own background color. This will override any existing background color set by the Container’s color property.


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

Conclusion

In conclusion, when using a Container widget in Flutter, be aware that setting its background color using the color property will also set the background color of any BoxDecoration used in conjunction with it. If you need to use both a background color and a BoxDecoration, make sure to use only the decoration property and specify a BoxDecoration with its own background color.