loading property
IDEA-53: shows a spinner in place of the label/icon and blocks taps
(even though onTap is non-null) while an async action this button
triggered — a purchase, a save, a cloud sync — is still in flight.
Deliberately keeps the button's accent color/shadow (see _enabled
vs _tappable below): visually this is "busy", not "unavailable",
so it shouldn't look the same as a genuinely disabled button.
Implementation
final bool loading;