If you need to show a semi-transparent image, use the opacity argument with AlwaysStoppedAnimation rather than adding a parent Opacity widget.

According to the docs, Opacity could apply the opacity to a group of widgets and therefore a costly offscreen buffer will be used.

How to Render Transparent Images Without the Opacity Widget
How to Render Transparent Images Without the Opacity Widget
// ❌ Works, but inefficient
// Opacity uses a (costly) offscreen buffer for rendering ⚠️
Opacity(
  opacity: 0.5,
  child: Image.asset('assets/banner.png'),
)
 
// ✅ Better for performance
Image.asset(
  'banner.png',
  opacity: const AlwaysStoppedAnimation(0.5),
)

Note: the Image class also has color and colorBlendMode arguments that can be used to apply custom color filters:

// Same result as above
Image.asset(
  'assets/banner.png',
  color: Colors.white.withOpacity(0.5),
  colorBlendMode: BlendMode.modulate,
)

To learn more about the Opacity widget and its alternatives, read the official docs:

Happy coding!