Extending Neo’s Default Themes
Neo provides two exceptional built-in themes -NeoThemeLight
and NeoThemeDark
- that are carefully designed for accessibility, consistency, and cross-platform compatibility. Instead of building themes from scratch, you should extend these default themes and only override the tokens you need to customize.
Benefits of Extending Default Themes:
- Automatically inherit Neo’s color combinations
- Maintain consistency with Neo’s design system
- Reduce maintenance burden by leveraging tested color relationships
- Focus only on your brand customizations rather than rebuilding everything
- Brand colors (
fgBrand
,bgBrand
,bgBrandHover
, etc.) - Optional spacing, radius, or typography adjustments
- Semantic colors (success, warning, danger)
- Neutral grays and surface colors
- Cross-platform visual consistency
Project Structure
The standard Neo theming structure organizes your custom colors and themes:Creating Your Light Theme
Create a light theme that extends Neo’s light theme and overrides only your brand colors:Creating Your Dark Theme
Create a matching dark theme that extends Neo’s dark theme:Using Your Custom Themes
Apply your custom themes in your app’s main file:Mixing Neo and Custom Colors
You can combine your custom colors with Neo’s built-in colors:Best Practices
Theme Architecture
- Extend
NeoThemeLight
andNeoThemeDark
instead of building from scratch - Keep brand colors in separate palette files for organization
- Follow the standard
lib/theming/
folder structure - Always create both light and dark theme variants
Customization Approach
- Start minimal - override only brand colors initially
- Use Neo’s semantic colors unless you have specific brand requirements
- Leverage
super.colors.copyWith()
to preserve Neo’s tested color relationships - Test thoroughly in both light and dark modes
Brand Integration
- Use your brand’s established color palette with Neo’s naming conventions
- Ensure sufficient contrast ratios for accessibility compliance