Other widgets that might trigger saveLayer()
and are potentially costly:

ShaderMask

ColorFilter

Chip—might trigger a call to saveLayer() if
disabledColorAlpha != 0xff

Text—might trigger a call to saveLayer()
if there’s an overflowShader

Minimize use of opacity and clipping

Opacity is another expensive operation, as is clipping.
Here are some tips you might find to be useful:

Use the Opacity widget only when necessary.
See the Transparent image section in the Opacity
API page for an example of applying opacity directly
to an image, which is faster than using the Opacity
widget.

Instead of wrapping simple shapes or text
in an Opacity widget, it’s usually faster to
just draw them with a semitransparent color.
(Though this only works if there are no overlapping
bits in the to-be-drawn shape.)