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.

// ❌ 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!





