components/ash_wallpaper.dart rendered by the AshWallpaper widget:
SolidWallpaper
A flat, single-color wallpaper built on the brand colors. Introduced to replace gradients with solid brand colors as part of removing gradients from the app. Palettes:
Factories:
ImageWallpaper
A single remote image by URL, cached viacached_network_image. Reach for it only when the artwork is supplied by the backend — it’s the one wallpaper type whose content isn’t decided in code.
imageSrc (required), scale (default 1.0), alignment (default center), fadeInDuration (default 500 ms). While loading (or on error) the wallpaper shows a surfaceBg placeholder.
It has exactly one use in the app today: the feature intro modal header, whose image URL arrives from the server.
The pattern bank is gone (July 29, 2026).
ImageWallpaper used to also serve a bank of 26 hand-drawn pattern PNGs through .pattern(image:) and .random(random:) factories. The five surfaces still on those patterns moved to SolidWallpaper(ReferenceColors.lavender) (#1412), then both factories and the pattern-bank plumbing were deleted (#1413).For a decorative brand background, use SolidWallpaper — don’t reintroduce a remote image for decoration.VectorWallpaper
Blurred gradient “blobs” over a background color — the most atmospheric option. Each named constructor is a fruit/persona theme with abgColor and three blob colors whose positions/sizes are deterministically randomized from a string seed:
home
apple
blackberry
blueberry
cherry
dragonfruit
grape
orange
peach
pear
plum
VectorWallpaper.lerp(a, b, t) interpolates two vector wallpapers — background color and each blob — enabling animated wallpaper transitions.
Vector wallpaper colors are intentionally off-token — vivid one-off values for atmosphere, not part of the reference ramps.
Legibility rule
Content over a wallpaper must stay readable. The convention (implemented in StyledListTile):- Solid wallpapers — dark sand-12 ink (
contentOnBrand), no scrim; the brand colors are light enough. Secondary lines takecontentOnBrandSecondary, the alpha ink. - Image/vector wallpapers — force a dark-brightness subtree via ThemeOverride and add a bottom gradient scrim, so light text sits on a darkened backdrop.
AshWallpaper widget’s default scrim is surfaceBg at 50% alpha; pass a custom scrim (or blur) as needed. See AshWallpaper for the rendering API.