semanticLabel property
What VoiceOver reads for the button.
Without it, VoiceOver reads buttonLabel, or for an icon-only button
the SF Symbol's built-in name — which describes the picture, not the
action (paintpalette.fill is read as "Paint palette, filled"). Set it
on every icon-only button.
Implementation
final String? semanticLabel;