adaptive_palette 2.0.0
adaptive_palette: ^2.0.0 copied to clipboard
Production-ready dynamic theming from images. Intelligent color extraction with quality presets, performance monitoring, and Spotify/YouTube-style widgets. Material Design 3 with WCAG accessibility.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.0.0 - 2025-12-01 #
Major Release - Architectural Rewrite #
This release restructures the package with improved modularity, performance, and developer experience. The core API remains backward compatible - most v1.x code continues to work without changes.
Added #
- Quality Presets:
ExtractionQuality.fast,balanced, andhighfor different use cases - ExtractionConfig: Unified configuration object with quality presets and callbacks
- Performance Monitoring:
ExtractionStatswith duration, cache hits, and image type detection - Cache Management: Configurable size (default: 32), warmup API, and statistics
- Debug Callbacks:
onDebugandonErrorfor real-time insights - Diversity Control: Configurable weight (0.0-2.0) to prevent selecting similar colors
- Comprehensive Tests: 59 unit tests covering all core algorithms
- Extensive Documentation: 15+ usage examples and migration guide
Changed #
- Modular Architecture: Refactored from 1636-line monolithic file into 12 clean modules
- Improved WCAG Compliance: More reliable contrast ratio calculations
- Better Default Parameters: Optimized for real-world performance
- Enhanced Theme Generation: Fixed color contrast bugs, improved fallback behavior
- Larger Cache: Increased from 16 to 32 entries by default
Breaking Changes #
-
Widget Parameters: Now use
ExtractionConfiginstead of individual parameters// Before AdaptiveImageOverlay.network(url, resize: 96, quantizeColors: 24) // After AdaptiveImageOverlay.network(url, config: ExtractionConfig.fromQuality(ExtractionQuality.high)) -
ThemeColors.toThemeData(): Changed from static to instance method
// Before ThemeColors.toThemeData(colors, brightness: Brightness.dark) // After colors.toThemeData(brightness: Brightness.dark) -
Internal Imports: Don't import from
lib/src/- use public API only
Backward Compatible #
The following v1.x code works without changes:
AdaptivePalette.fromImage()with named parametersPaletteScopewidget and controller- All
ThemeColorsproperties andcopyWith()
See MIGRATING.md for detailed upgrade instructions.
Fixed #
- WCAG contrast calculation bugs in theme generation
- Type safety issues (34 analyzer warnings → 0)
- Memory leaks in cache management
- Documentation accuracy
Performance #
Typical extraction times (MacBook Pro M1, Release mode):
| Quality | Time | Use Case |
|---|---|---|
| Fast | 30-50ms | Lists, thumbnails |
| Balanced | 60-90ms | General use (default) |
| High | 90-140ms | Hero images |
| Cache Hit | <1ms | All cached images |
1.0.7 - 2025-11-18 #
Changed #
- Major algorithm improvement with adaptive scoring for different image types
- Increased default
quantizeColorsto 32 andresizeto 128 - Now uses CAM16 perceptual color space for better accuracy
Improved #
- Adaptive thresholds for colorful, monochromatic, and normal images
- Better color diversity through hue distance calculations
- Smart filtering prevents selecting multiple shades of same color