Skip to main content
Sundial has two icon systems, used side by side:

AshIcons — custom SVGs

21 brand-specific icons (personas, activities, third-party brand marks) rendered by the AshIcon widget from assets/icons/*.svg.

Symbols — Material Symbols Rounded

The full Material Symbols Rounded set as icon fonts, in outlined and filled variants, exposed as IconData constants.

AshIcons (custom SVG)

Defined in components/ash_icon.dart. Each enum value maps to assets/icons/{value}.svg:
Color and size resolve in this order: explicit parameter → surrounding IconTheme → context.colorTheme.contrastStrong. Unless useOriginalColor: true, the SVG is tinted via ColorFilter.mode(color, BlendMode.srcIn).
Adding an icon: drop the SVG into assets/icons/ and register it in the AshIcons enum — unregistered files can’t be used. See Contributing.

Accessibility convention

semanticLabel defaults to null, which hides the icon from screen readers (decorative). Icon-only buttons should label at the button layer (e.g. IconButton.tooltip) instead of the icon, to avoid double announcements.

Symbols (Material Symbols Rounded)

symbols.dart is a generated glyph map (~600 KB — don’t edit by hand) exposing the complete Material Symbols Rounded set as IconData:
Two icon fonts back it, declared in pubspec.yaml: MaterialSymbolsRounded (outlined) and MaterialSymbolsRoundedFilled (filled). Use Symbols.* for general UI iconography; reserve AshIcons for brand-specific artwork that doesn’t exist in Material Symbols.
  • AshIcon — the SVG icon widget
  • AshLogo — the Ash wordmark/logo (assets/icons/AshLogo.svg), separate from the icon enum