NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #541 most downloaded on pub.dev
A more flexible and powerful version of Flutter's ColorScheme.fromSeed. Use multiple seed colors, custom chroma and tone mapping.
Last release 1 months ago
30 Aug 2026
Release timing varies
gaps range from 1 weeks to 9 months
Nearly every release is documented
notes for 28 of 28 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
39 releases · first in 2022
Example web demo: replaced the deprecated Flutter service-worker / loadEntrypoint bootstrap with flutter_bootstrap.js .
Aug 30, 2026
EXAMPLE
MaterialUiCompatibilityBridge.loadEntrypoint bootstrap with flutter_bootstrap.js.DOCS
SeedColorScheme.buildDynamicScheme now has the same dartdoc shape as fromSeeds: a short purpose, then parameter sections, plus matching inline parameter docs.CHORE
flutter_bootstrap.js.As documented, these strings may change in any release and this is not a breaking change. No generated colors are affected.
One column per quarter.
Aug 24, 2026
The version requires Flutter 3.47.0 or higher. Offers support for SDK decoupled Material and Cupertino libraries.
BREAKING
This version requires Flutter 3.47.0 or higher
It also opts in on Dart 3.13.0 language features and lints.
This release brings full support for the standalone material_ui and cupertino_ui packages.
Per Flutter's official recommendation the package is released as a major breaking release, but contains no breaking APIs or any new APIs. Produced ColorScheme results are same as before too, with one intentional bug fix exception, see the surfaceTintTone fix below.
FIX-BREAKING: The FlexTones.surfaceTintTone tone mapping is now actually applied to the produced ColorScheme.surfaceTint on the tones based generation path. It was always intended to be, but the produced scheme previously always assigned the produced primary color to ColorScheme.surfaceTint, silently ignoring the tone mapping. This bug fix changes produced ColorScheme.surfaceTint results for the built-in configurations FlexTones.ultraContrast, FlexTones.candyPop and FlexTones.chroma, whose custom surfaceTintTone (30 in light mode, 95 in dark mode) differs from their primary tone, as well as for custom FlexTones where surfaceTintTone differs from primaryTone. The built-ins vivid, vividSurfaces, vividBackground, highContrast and jolly define surfaceTintTone 30 in light mode where their primary tone is also 30, so their produced results do not change. The surfaceTint override parameter in SeedColorScheme.fromSeeds works as before. The MCU variant based path is unchanged and keeps surfaceTint equal to primary, matching Flutter's ColorScheme.fromSeed, which uses MaterialDynamicColors.primary and not MaterialDynamicColors.surfaceTint for the produced surfaceTint color. This is intentional Flutter parity: the two MCU colors differ when contrastLevel is not 0 and for the monochrome variant; a code comment now documents this so it is not mistaken for a bug. Usage of the surfaceTintTone feature is likely extremely rare, so consumer impact of its fix should be very low, and the new result is the originally intended one.
FIX
FlexTones: the useCam16 property was missing from copyWith, operator ==, hashCode and debugFillProperties. Any copyWith call silently reset useCam16 to its default true, including the internal copyWith-based modifier expressiveOnContainer that SeedColorScheme.fromSeeds applies. This did not change any produced colors, since Cam16.fromInt and Hct.fromInt return the same hue and chroma for the same input color, which is also why the omission went unnoticed. Equality however wrongly reported two FlexTones configs differing only in useCam16 as equal. All four are fixed and debugFillProperties also gained the previously missing onErrorTone entry.CHANGE DOCS
The changes below are only documentation and agent changes. No code behavior was changed.
FlexSchemeVariant UI strings description and configDetails against the actual scheme generation code. As documented, these strings may change in any release and this is not a breaking change. No generated colors are affected.
expressive: config details tertiary palette uses Chroma 32 (not 24) and hue rotation range 15-120 degrees (not 20-120).soft, vivid, highContrast and oneHue: config details neutral palette uses Chroma 6 (not 4). The value 4 was a leftover from before FSS 2.0.0, when the Material-3 default neutral chroma changed to 6.fidelity and content: the descriptions were nearly identical, they now state their actual difference: tertiary palette is the seed color's complement (fidelity) versus an analogous hue (content).vividBackground: description no longer refers to the deprecated background color swap, it now describes the actual difference to vividSurfaces (white surface in light mode, slightly darker surface in dark mode).vibrant, expressive) now read "Hue from primary or key rotated x-y degrees", while variants that use a provided key hue as-is keep the "Hue primary rotated 60 degrees or key" form.FlexSchemeVariant.vividSurfaces: neutral chroma is 5 and neutralVariant 10, not 8 and 16.FlexSchemeVariant.candyPop and FlexSchemeVariant.chroma: removed references to the removed background color and corrected surface tones (chroma uses light surface tone 99 and dark 4).FlexTones.dark: default neutral chroma limits are 6 and 8, not 4 and 8.FlexTones.candyPop: dark mode surface tone is 6, not 5.FlexTones.chroma: light mode surface tone is 99 (not 98) and dark mode 4 (not 6).FlexPaletteType.extended has 30 tones; docs variously claimed 24, 25, 26 and 27, and omitted the FSS extra tones 65, 75 and 84 from listings. Also corrected which extended tones are M3 spec additions versus FSS extras (2 and 97 are FSS extras).FlexPaletteType narrative about the common type limiting chroma to max 40 for tones >= 90. That clamp was removed in FSS 2.0.0; the palette types now differ only in included tones.FlexTones field docs: secondaryMinChroma and tertiaryMinChroma effective fallbacks are 0 (docs claimed 16 and 24); neutralChroma constructor default is 6 (doc claimed 4); onSecondaryFixedTone maps to onSecondaryFixed (doc said secondaryFixed); onSurfacesUseBW doc no longer claims it affects main on-colors.FlexTones.copyWith does not include useCam16 (a copy always resets it to true) and produced ColorScheme.surfaceTint is always assigned primary, so FlexTones.surfaceTintTone is currently not applied. Both are candidates for actual code fixes in a future release.FlexCorePalette docs: six palettes (not five), error palette defaults to hue 25 / chroma 84; code sample now uses value32bit instead of deprecated Color.value; "matching Flutter SDK" chroma claims qualified as pre Flutter 3.22 behavior.useExpressiveOnContainerColors doc block (defaults to true since FSS 4.0.0 and only switches the light mode on-container tone, not the contrast curve), wrong color names on outline, onBackground and secondary docs, a duplicated Cam16 class doc, inverted L*/Y linearity claims, restored two "nonlinearity" comments corrupted by line reflow, added the missing Google license header to key_color.dart, removed a misleading "automatically generated" banner from the heavily customized scheme.dart, removed dead commented-out imports, and fixed assorted upstream typos.material_ui, wrong default value comments in custom_tones.dart, and assorted typos.dart format --fix no longer exists in Dart 3.13, commands updated in AGENTS.md and skills; CONTRIBUTING.md now says master branch; corrected stale workflow header comments (test.yml is the active CI, validate.yaml is disabled and used a removed flutter format command; web build no longer references a renderer flag).FlexTones configuration count to twelve (said eleven) and the pre-FSS 2.0.0 default value comments in the custom FlexTones code sample (primaryMinChroma, secondaryChroma and tertiaryChroma default to null, not 36/16/24).FlexPaletteType.common high-tone chroma clamp, deleted in FSS 2.0.0; the palette types now differ only in included tones.Colors(0xFF555555) → Color(0xFF555555)), wrong sample comments (chroma variant labeled vibrant), and replaced a misleading example that chained onMainsUseBW().expressiveOnContainer(), where the second modifier was a no-op, with a working example plus a note about modifier order.FlexTones.extended/FlexTones.common → FlexPaletteType.*), tonalSport → tonalSpot, FlexSeedSeed scheme → FlexSeedScheme, "FFS" → FSS, repeated "from a seeds", "none surface" → non-surface, and assorted grammar issues.material_ui/cupertino_ui support, the surfaceTintTone fix), a headline bullet for respectMonochromeSeed, and a new "Color Channel Getters" section documenting the exported value32bit/alpha8bit/red8bit/green8bit/blue8bit extensions.release skill (pub.dev publish flow, GitHub release triggered web demo deploy, downstream coordination), added a "Verify claims against code" section with known stale-info traps and the FlexSchemeVariant string phrasing conventions to the code-documentation skill, and logged deliberate MCU comment divergences in the mcu-fork-sync skill reference. Also documented in the package-development skill that analysis_options.yaml is the versioned RydMike linter preferences file publicly shared as a gist, so rule changes to it or all_lint_rules.yaml get a CHANGELOG note and a reminder to update the gist.TESTS
FlexTones.candyPop and FlexTones.chroma, light and dark (FCS7.028, FCS7.029). Together with the existing ultraContrast goldens, all three tone mappings whose produced results changed with the surfaceTintTone fix are now locked against unintended changes.useExpressiveOnContainerColors: false on-container colors on the MCU variant path (FCS7.030). Coverage of those legacy branches was lost when other tests moved to the new expressive default.FlexTones modifiers called with a false flag (FTO1.15).coverage:ignore markers by adding tests for previously untested branches. These are extra coverage tests not done by MCU upstream. They will allow us to better verify our forked MCU version and detect changes made to MCU upstream in the future:
DynamicColor.getTone: background color landing in the awkward tone 50..60 zone, ToneDeltaPair with stayTogether in both light and dark mode, all dual background fallback branches, and the foregroundTone negligible-difference edge case.TemperatureCache: analogous with more divisions than hue steps and with count larger than divisions, plus cached complement and inputRelativeTemperature calls.Score.score fallback color when all input colors are filtered out.QuantizerWsmeans empty cluster reset when a starting cluster captures no points.identical equality short circuits in CorePalette and CorePalettes (self comparison tests) and the awkward-zone adjustment to tone 60 in DynamicColor.getTone, used when tone 49 cannot reach the required contrast against a dark background.QuantizerWsmeans, negative modulo guards in MathUtils that Dart's % operator can never produce, index guards in TemperatureCache.analogous that its callers can never trigger, and one unreachable defensive padding line.FlexTones useCam16 fix: equality of configs differing only in useCam16 (FTO1.02c) and copyWith/modifier preservation of useCam16 (FTO1.09d).FlexTones toString golden for the added onErrorTone and useCam16 diagnostics properties.useCam16: false for FlexTones.material, which the previous incomplete equality operator could not detect.useExpressiveOnContainerColors: false for all MCU DynamicSchemeVariants. This is no longer needed as the default is now true in Flutter stable 3.44.0 and later. The option to not use expressive on container colors is still available and can be used by setting useExpressiveOnContainerColors to false when calling SeedColorScheme.fromSeeds. However, Flutter's ColorScheme.fromSeed does not use expressive on container colors anymore, nor does it offer it as an option. With FlexSeedScheme it is still available and can be used as before. The SeedColorScheme.fromSeeds parameter useExpressiveOnContainerColors already defaulted to true instead of false in FSS version 4.0.0, and started using it as default before Flutter switched to it. You can still use the legacy option if you need it.CHORE
dart pub publish --dry-run warnings and reduced the published package archive from 13 MB to about 0.5 MB.
generated_plugin_registrant.*, generated_plugins.cmake and GeneratedPluginRegistrant.swift for Windows, Linux and macOS). They are regenerated by flutter pub get and builds, and current Flutter project templates git-ignore them. They are no longer part of the published package either..pubignore. It restates the publishing-relevant .gitignore rules (a .pubignore replaces the .gitignore in the same directory for publishing decisions) and additionally excludes internal repository content from the published archive: AGENTS.md, docs/, scripts/, and the README image folder doc_assets/. The README references its images via absolute GitHub URLs, so pub.dev does not need them in the archive. Excluding docs/ also resolves the pub layout warning about a plural top-level docs directory. The example/screenshots/ folder is intentionally still published: its files are declared in the pubspec screenshots: section and the pub.dev server rejects the upload if they are missing from the archive, a check the local dry run does not perform.codecov/codecov-action from the end-of-life v3 to v5 in all three workflows and renamed its file: input to files: per the v4+ API. The -dev.1 release will serve as a live test of the deploy workflow.Cam16 hue helper was already in FSS version 4.0.0; MCU 0.13.1 published that commit.avoid_final_parameters and var_with_no_type_annotation only work with a language version of Dart 3.12 or lower.parameter_assignments linter rule, which this repo already always enforced. See https://dart.dev/language/primary-constructorsaxisAlignment in ListTileReveal and SwitchListTileReveal widgets.MaterialUiCompatibilityBridge.
MaterialUiCompatibilityBridge.As documented, these strings may change in any release and this is not a breaking change. No generated colors are affected.
Aug 24, 2026
The version requires Flutter 3.47.0 or higher. Offers support for SDK decoupled Material and Cupertino libraries.
BREAKING
This version requires Flutter 3.47.0 or higher
It also opts in on Dart 3.13.0 language features and lints.
This release brings full support for the standalone material_ui and cupertino_ui packages.
Per Flutter's official recommendation the package is released as a major breaking release, but contains no breaking APIs or any new APIs. Produced ColorScheme results are same as before too, with one intentional bug fix exception, see the surfaceTintTone fix below.
FIX-BREAKING: The FlexTones.surfaceTintTone tone mapping is now actually applied to the produced ColorScheme.surfaceTint on the tones based generation path. It was always intended to be, but the produced scheme previously always assigned the produced primary color to ColorScheme.surfaceTint, silently ignoring the tone mapping. This bug fix changes produced ColorScheme.surfaceTint results for the built-in configurations FlexTones.ultraContrast, FlexTones.candyPop and FlexTones.chroma, whose custom surfaceTintTone (30 in light mode, 95 in dark mode) differs from their primary tone, as well as for custom FlexTones where surfaceTintTone differs from primaryTone. The built-ins vivid, vividSurfaces, vividBackground, highContrast and jolly define surfaceTintTone 30 in light mode where their primary tone is also 30, so their produced results do not change. The surfaceTint override parameter in SeedColorScheme.fromSeeds works as before. The MCU variant based path is unchanged and keeps surfaceTint equal to primary, matching Flutter's ColorScheme.fromSeed, which uses MaterialDynamicColors.primary and not MaterialDynamicColors.surfaceTint for the produced surfaceTint color. This is intentional Flutter parity: the two MCU colors differ when contrastLevel is not 0 and for the monochrome variant; a code comment now documents this so it is not mistaken for a bug. Usage of the surfaceTintTone feature is likely extremely rare, so consumer impact of its fix should be very low, and the new result is the originally intended one.
FIX
FlexTones: the useCam16 property was missing from copyWith, operator ==, hashCode and debugFillProperties. Any copyWith call silently reset useCam16 to its default true, including the internal copyWith-based modifier expressiveOnContainer that SeedColorScheme.fromSeeds applies. This did not change any produced colors, since Cam16.fromInt and Hct.fromInt return the same hue and chroma for the same input color, which is also why the omission went unnoticed. Equality however wrongly reported two FlexTones configs differing only in useCam16 as equal. All four are fixed and debugFillProperties also gained the previously missing onErrorTone entry.CHANGE DOCS
The changes below are only documentation and agent changes. No code behavior was changed.
FlexSchemeVariant UI strings description and configDetails against the actual scheme generation code. As documented, these strings may change in any release and this is not a breaking change. No generated colors are affected.
expressive: config details tertiary palette uses Chroma 32 (not 24) and hue rotation range 15-120 degrees (not 20-120).soft, vivid, highContrast and oneHue: config details neutral palette uses Chroma 6 (not 4). The value 4 was a leftover from before FSS 2.0.0, when the Material-3 default neutral chroma changed to 6.fidelity and content: the descriptions were nearly identical, they now state their actual difference: tertiary palette is the seed color's complement (fidelity) versus an analogous hue (content).vividBackground: description no longer refers to the deprecated background color swap, it now describes the actual difference to vividSurfaces (white surface in light mode, slightly darker surface in dark mode).vibrant, expressive) now read "Hue from primary or key rotated x-y degrees", while variants that use a provided key hue as-is keep the "Hue primary rotated 60 degrees or key" form.FlexSchemeVariant.vividSurfaces: neutral chroma is 5 and neutralVariant 10, not 8 and 16.FlexSchemeVariant.candyPop and FlexSchemeVariant.chroma: removed references to the removed background color and corrected surface tones (chroma uses light surface tone 99 and dark 4).FlexTones.dark: default neutral chroma limits are 6 and 8, not 4 and 8.FlexTones.candyPop: dark mode surface tone is 6, not 5.FlexTones.chroma: light mode surface tone is 99 (not 98) and dark mode 4 (not 6).FlexPaletteType.extended has 30 tones; docs variously claimed 24, 25, 26 and 27, and omitted the FSS extra tones 65, 75 and 84 from listings. Also corrected which extended tones are M3 spec additions versus FSS extras (2 and 97 are FSS extras).FlexPaletteType narrative about the common type limiting chroma to max 40 for tones >= 90. That clamp was removed in FSS 2.0.0; the palette types now differ only in included tones.FlexTones field docs: secondaryMinChroma and tertiaryMinChroma effective fallbacks are 0 (docs claimed 16 and 24); neutralChroma constructor default is 6 (doc claimed 4); onSecondaryFixedTone maps to onSecondaryFixed (doc said secondaryFixed); onSurfacesUseBW doc no longer claims it affects main on-colors.FlexTones.copyWith does not include useCam16 (a copy always resets it to true) and produced ColorScheme.surfaceTint is always assigned primary, so FlexTones.surfaceTintTone is currently not applied. Both are candidates for actual code fixes in a future release.FlexCorePalette docs: six palettes (not five), error palette defaults to hue 25 / chroma 84; code sample now uses value32bit instead of deprecated Color.value; "matching Flutter SDK" chroma claims qualified as pre Flutter 3.22 behavior.useExpressiveOnContainerColors doc block (defaults to true since FSS 4.0.0 and only switches the light mode on-container tone, not the contrast curve), wrong color names on outline, onBackground and secondary docs, a duplicated Cam16 class doc, inverted L*/Y linearity claims, restored two "nonlinearity" comments corrupted by line reflow, added the missing Google license header to key_color.dart, removed a misleading "automatically generated" banner from the heavily customized scheme.dart, removed dead commented-out imports, and fixed assorted upstream typos.material_ui, wrong default value comments in custom_tones.dart, and assorted typos.dart format --fix no longer exists in Dart 3.13, commands updated in AGENTS.md and skills; CONTRIBUTING.md now says master branch; corrected stale workflow header comments (test.yml is the active CI, validate.yaml is disabled and used a removed flutter format command; web build no longer references a renderer flag).FlexTones configuration count to twelve (said eleven) and the pre-FSS 2.0.0 default value comments in the custom FlexTones code sample (primaryMinChroma, secondaryChroma and tertiaryChroma default to null, not 36/16/24).FlexPaletteType.common high-tone chroma clamp, deleted in FSS 2.0.0; the palette types now differ only in included tones.Colors(0xFF555555) → Color(0xFF555555)), wrong sample comments (chroma variant labeled vibrant), and replaced a misleading example that chained onMainsUseBW().expressiveOnContainer(), where the second modifier was a no-op, with a working example plus a note about modifier order.FlexTones.extended/FlexTones.common → FlexPaletteType.*), tonalSport → tonalSpot, FlexSeedSeed scheme → FlexSeedScheme, "FFS" → FSS, repeated "from a seeds", "none surface" → non-surface, and assorted grammar issues.material_ui/cupertino_ui support, the surfaceTintTone fix), a headline bullet for respectMonochromeSeed, and a new "Color Channel Getters" section documenting the exported value32bit/alpha8bit/red8bit/green8bit/blue8bit extensions.release skill (pub.dev publish flow, GitHub release triggered web demo deploy, downstream coordination), added a "Verify claims against code" section with known stale-info traps and the FlexSchemeVariant string phrasing conventions to the code-documentation skill, and logged deliberate MCU comment divergences in the mcu-fork-sync skill reference. Also documented in the package-development skill that analysis_options.yaml is the versioned RydMike linter preferences file publicly shared as a gist, so rule changes to it or all_lint_rules.yaml get a CHANGELOG note and a reminder to update the gist.TESTS
FlexTones.candyPop and FlexTones.chroma, light and dark (FCS7.028, FCS7.029). Together with the existing ultraContrast goldens, all three tone mappings whose produced results changed with the surfaceTintTone fix are now locked against unintended changes.useExpressiveOnContainerColors: false on-container colors on the MCU variant path (FCS7.030). Coverage of those legacy branches was lost when other tests moved to the new expressive default.FlexTones modifiers called with a false flag (FTO1.15).coverage:ignore markers by adding tests for previously untested branches. These are extra coverage tests not done by MCU upstream. They will allow us to better verify our forked MCU version and detect changes made to MCU upstream in the future:
DynamicColor.getTone: background color landing in the awkward tone 50..60 zone, ToneDeltaPair with stayTogether in both light and dark mode, all dual background fallback branches, and the foregroundTone negligible-difference edge case.TemperatureCache: analogous with more divisions than hue steps and with count larger than divisions, plus cached complement and inputRelativeTemperature calls.Score.score fallback color when all input colors are filtered out.QuantizerWsmeans empty cluster reset when a starting cluster captures no points.identical equality short circuits in CorePalette and CorePalettes (self comparison tests) and the awkward-zone adjustment to tone 60 in DynamicColor.getTone, used when tone 49 cannot reach the required contrast against a dark background.QuantizerWsmeans, negative modulo guards in MathUtils that Dart's % operator can never produce, index guards in TemperatureCache.analogous that its callers can never trigger, and one unreachable defensive padding line.FlexTones useCam16 fix: equality of configs differing only in useCam16 (FTO1.02c) and copyWith/modifier preservation of useCam16 (FTO1.09d).FlexTones toString golden for the added onErrorTone and useCam16 diagnostics properties.useCam16: false for FlexTones.material, which the previous incomplete equality operator could not detect.useExpressiveOnContainerColors: false for all MCU DynamicSchemeVariants. This is no longer needed as the default is now true in Flutter stable 3.44.0 and later. The option to not use expressive on container colors is still available and can be used by setting useExpressiveOnContainerColors to false when calling SeedColorScheme.fromSeeds. However, Flutter's ColorScheme.fromSeed does not use expressive on container colors anymore, nor does it offer it as an option. With FlexSeedScheme it is still available and can be used as before. The SeedColorScheme.fromSeeds parameter useExpressiveOnContainerColors already defaulted to true instead of false in FSS version 4.0.0, and started using it as default before Flutter switched to it. You can still use the legacy option if you need it.CHORE
dart pub publish --dry-run warnings and reduced the published package archive from 13 MB to about 0.5 MB.
generated_plugin_registrant.*, generated_plugins.cmake and GeneratedPluginRegistrant.swift for Windows, Linux and macOS). They are regenerated by flutter pub get and builds, and current Flutter project templates git-ignore them. They are no longer part of the published package either..pubignore. It restates the publishing-relevant .gitignore rules (a .pubignore replaces the .gitignore in the same directory for publishing decisions) and additionally excludes internal repository content from the published archive: AGENTS.md, docs/, scripts/, and the README image folder doc_assets/. The README references its images via absolute GitHub URLs, so pub.dev does not need them in the archive. Excluding docs/ also resolves the pub layout warning about a plural top-level docs directory. The example/screenshots/ folder is intentionally still published: its files are declared in the pubspec screenshots: section and the pub.dev server rejects the upload if they are missing from the archive, a check the local dry run does not perform.codecov/codecov-action from the end-of-life v3 to v5 in all three workflows and renamed its file: input to files: per the v4+ API. The -dev.1 release will serve as a live test of the deploy workflow.Cam16 hue helper was already in FSS version 4.0.0; MCU 0.13.1 published that commit.avoid_final_parameters and var_with_no_type_annotation only work with a language version of Dart 3.12 or lower.parameter_assignments linter rule, which this repo already always enforced. See https://dart.dev/language/primary-constructorsaxisAlignment in ListTileReveal and SwitchListTileReveal widgets.MaterialUiCompatibilityBridge.
MaterialUiCompatibilityBridge.The version requires Flutter 3.38.0 or higher.
Nov 23, 2025
The version requires Flutter 3.38.0 or higher.
FIX
README.md section about useExpressiveOnContainerColors.This FSS release contains a breaking change to match the default for expressive on-container colors in MCU 0.12.0. This is also included in the coming…
Nov 22, 2025
The version requires Flutter 3.38.0 or higher.
This release really brings the bundled forked version of the package Material Color Utilities (MCU) to parity with version 0.13.0. Flutter stable 3.38.x still uses MCU 0.11.1. Next version of Flutter, after stable 0.38, will use MCU 0.13.0, see PR 12125.
This FSS release contains a breaking change to match the default for expressive on-container colors in MCU 0.12.0. This is also included in the coming bump to MCU 0.13.0 in Flutter after version 3.38.
BREAKING
SeedColorScheme.fromSeeds parameter useExpressiveOnContainerColors now defaults to true instead of false.
SeedColorScheme.fromSeeds match the default behavior of MCU 0.12.0 and later, where expressive on-container colors are used by default in light mode.useExpressiveOnContainerColors to false when calling SeedColorScheme.fromSeeds.DynamicScheme parameter customErrorPalette was renamed to errorPalette to match newly exposed MCU 0.13.0 naming.
customErrorPalette in DynamicScheme. It is very unlikely to be used directly by end users of this package, as it is a very low-level API and not used by recommended main public APIs directly, but it was a public API, unfortunately.int properties in FlexSeedScheme._() and same named public Color parameters in SeedColorScheme.fromSeeds():
backgroundonBackgroundsurfaceVariantint properties in FlexTones(), FlexTones.light() and FlexTones.dark() and same named parameters in FlexTones.copyWith():
backgroundToneonBackgroundTonesurfaceVariantToneCHANGE
FlexSchemeVariant and their configDetails descriptions to offer better explanations.
FlexSchemeVariant, any changes in the property values variantName, description, configDetails, icon and shade are not considered breaking changes, only patches.FlexColorScheme package example apps, like the Themes Playground.CHORE
MathUtils.sanitizeDegreesDouble for hue calculation in Cam16. (MCU update Nov 19, 2025, not yet in any package version)KeyColor algorithm and its binary search optimization that was added in MCU 0.11.2. This may improve performance when extracting tonal palettes from seed colors.TESTS
useExpressiveOnContainerColors defaulting to true.DynamicSchemeVariants to ensure they can be created without errors, so that same DynamicScheme matches results from Flutter's ColorScheme.fromSeed using corresponding DynamicSchemeVariant. The loop test excludes the variants DynamicSchemeVariant.fidelity, DynamicSchemeVariant.monochrome and DynamicSchemeVariant.content that have their own special tone logic. Previously only the default DynamicSchemeVariant.tonalSpot was tested this way. This test helps us verify that our fork of MCU can match the version of MCU that Flutter uses internally. When Flutter stable changes to use MCU 0.13.0, this test will need to change its flag useExpressiveOnContainerColors from false to true.FIX changelog that dropped the 3.5.1 heading in 3.6.0 release
Nov 5, 2025
FIX
Due to breaking changes in Flutter 3.35.0, the package now also requires at least Flutter 3.35.0.
Requires at least Flutter 3.35.0
Nov 5, 2025
CHORE
MaterialDynamicColors fields are now final.Update lints for package scoring.
March 15, 2025
CHORE
Version to check if the updates fixes pub score.
March 15, 2025
Version to check if the updates fixes pub score.
CHORE
Fixed all new analyzer lint warnings and removed usage of all deprecated Color properties.
Dec 29, 2024
PACKAGE
Color properties.NEW
Color sRGB extensions that can be used as none deprecated replacements for alpha, red, green, blue and value they are called alpha8bit, red8bit, green8bit, blue8bit and value32bit. FlexSeedScheme uses them internally to avoid using the deprecated Color properties.No changes to the FlexSeedScheme package
Sep 25, 2024
PACKAGE
WEB DEMO
respectMonochromeSeed so the picker only uses it when the FlexSeedScheme web demo is configured to do so. The setting for the FlexColorPicker to make monochrome tonal palette for monochrome input and to use chroma of selected color, is a separate feature in the picker, it is not tied to FlexSeedScheme, but for this demo they are linked and use the same settings toggle.The parameter useExpressiveOnContainerColors in SeedColorScheme.fromSeeds now works with a scheme variant regardless of if it has isFlutterScheme set
Sep 23, 2024
CHANGE
The parameter useExpressiveOnContainerColors in SeedColorScheme.fromSeeds now works with a scheme variant regardless of if it has isFlutterScheme set to true or false. Meaning it impacts both MCU DynamicSchemeVariant and FSS FlexTones based scheme variants.
FlexTones based variants, when using a built-in FlexTones or even a custom one, it is no longer necessary to use the FlexTones modifier .expressiveOnContainer() on the used tones to get a seeded color scheme with expressive on container tones in light mode.FlexTones based modifier .expressiveOnContainer() is still used, but it is applied internally when the flag useExpressiveOnContainerColors is set to true.useExpressiveOnContainerColors only applies in light mode to on container tones that are equal to 10, other tones are considered custom on purpose and are not changed. This is in-line with that the MCU DynamicSchemeVariants that did not use tone 30 before as on container color in light mode, like Fidelity, Monochrome and Content were not affected by this change in MCU 0.12.0. In the same manner, this flag no longer changes FlexTones based schemes that have on container tones that are not 10. This applies to some on container colors in UltraContrast, Candy Pop and Chroma predefined FlexTones.DynamicSchemeVariant, built-in FlexTones or even custom FlexTones configurations.useExpressiveOnContainerColors only has any impact when contrast level is at the default value (0), normal contrast.useExpressiveOnContainerColors set to true, the modifier is applied before any FlexTones modifiers. Using tones modifiers, like e.g. onMainsUseBW() will thus as expected, override this setting and set on container colors to tone 0 or tone 100, depending on the container colors brightness.NEW
bool parameter, respectMonochromeSeed in SeedColorScheme.fromSeeds can now be used to make seed generated ColorSchemes that work as expected if a monochrome color is used as seed color input.
true, any monochrome RGB input value will result in the creation of a greyscale tonal palette for the palette using the monochrome seed color. An RGB monochrome value is one where Red, Green and Blue values are all equal.ColorScheme.fromSeed, using a monochrome seed color value or white, resulted in a tonal palette with cyan color tones. A black input resulted in red like color tones. This is not very intuitive and not really expected when using monochrome seed colors.respectMonochromeSeed to false, to not break any existing code that may rely on the old behavior.respectMonochromeSeed to true, to get more logical seed results when using monochrome seed colors or white and black as seed colors.respectMonochromeSeed with DynamicSchemeVariant variants fidelity or content, for some monochrome input colors they produce primaryContainer and onPrimaryContainer as well as tertiaryContainer and onTertiaryContainer color pairs, with low contrast. Consider using some other scheme variants with monochrome seed colors. All others work well with any monochrome seed color. This is just how the MCU DynamicSchemes SchemeContent and SchemeFidelity are defined in MCU. They also produce fairly low contrast for these color pairs with very dark seed colors. This behavior with MCU's SchemeContent and SchemeFidelity could be fixed in FlexSeedScheme's internal MCU fork, but we want to keep the result of these schemes consistent with MCU.Un-deprecated Scheme, that original MCU deprecated. It does not conflict with the new DynamicSchemes that replaced it, thus in the internal MCU fork,…
Sep 7, 2024
NEW
DynamicColor, MaterialDynamicColors and Scheme from the underlying forked Material Color Utilities (MCU) library.Scheme, that original MCU deprecated. It does not conflict with the new DynamicSchemes that replaced it, thus in the internal MCU fork, we do not need to deprecate it and can offer it for legacy access to old ColorScheme.fromSeed scheme result in use before Flutter 3.22.0.
Scheme for its own legacy version of the same scheme, it uses its FlexTones based setup instead, but produces the same color values. We still recommend using its tones FlexTones.material3Legacy version instead of Scheme for a legacy Material-3 seed generated ColorScheme.Scheme style and API, that was used in Flutter 3.19.0 and earlier in its ColorScheme.fromSeed constructor back then. If you want to recreate its exact older internal API algorithm, you can now do so using Scheme that it used to use before Flutter 3.22.0.Scheme class was also complemented with the new ColorScheme colors added in Flutter 3.22.0, but it uses legacy Flutter 3.19 and earlier tone mappings for all colors that existed then. Except for dark mode onErrorContainer that it corrected from 80 to 90. It was always a bug in Flutter version 3.19 and earlier that tone 80 was used.The FlexPaletteType.extended tones got three new tones, tones 65, 75 and 84. It now has 30 tones.
Aug 27, 2024
CHANGE
FlexPaletteType.extended tones got three new tones, tones 65, 75 and 84. It now has 30 tones.NEW
tones configuration class FlexTones got a new modifier, higherContrastFixed(). It can be applied to any predefined or custom FlexTones to make a returned FlexTones instance where the tones for the fixed colors fixed, onFixed, fixedDim and onFixedVariant are set to 92, 6, 84 and 12 instead of their Material-3 specification tones 90, 10, 80 and 30. This for an alternative set of fixed colors with more contrast.FSS version 3.1.0 removed the deprecated colors background, onBackground and surfaceVariant from being defined as a part of the SeedColorScheme.fromSe…
July 23, 2024
FIX
FIX the faulty tones for the modified FlexTones.vividSurfaces surface tones. They were in version 3.1.0 set to 96 for a light scheme and 10 for a dark scheme. The values need to be 98 and 6 to not clash with any other important tones used by all the surface colors and provide separation to them. Tones 98 and 6 are also the default tones in M3 design for them, there is very little wiggle room here.
FIX tone for the modified FlexTones.vividBackground it was in version 3.1.0 set to 97 for its light scheme, it needs to use value 100 (white) to really provide a "vivid" background mode in light mode and offer some differentiation to FlexTones.vividSurfaces in light mode. In dark mode it still uses tone 5, which is already different and darker than 6 used by FlexTones.vividSurfaces.
INFO
FlexTones.vividSurfaces and FlexTones.vividBackground tone mappings?
background, onBackground and surfaceVariant from being defined as a part of the SeedColorScheme.fromSeeds result. They still get color values, but they are whatever the default values the default Flutter SDK ColorScheme() constructor gives them. These colors were deprecated in Flutter 3.22.0 and are now removed from being defined and accessed by FSS.FlexTones.vividSurfaces and FlexTones.vividBackground to make them have some distinguishing differences when background color no longer has any effect or usage, and also to adhere to new the ColorScheme design intent.FlexTones.vividSurfaces or FlexTones.vividBackground you can optionally recreate them with copyWith on their definitions like this:// For light legacy FlexTones.vividSurfaces
final ColorScheme vividSurfacesLight = SeedColorScheme.fromSeeds(
brightness: Brightness.light,
primaryKey: mySeedColor,
tones: FlexTones.vividSurfaces(Brightness.light).copyWith(surfaceTone: 95),
);
// For dark legacy FlexTones.vividSurfaces
final ColorScheme vividSurfacesDark = SeedColorScheme.fromSeeds(
brightness: Brightness.dark,
primaryKey: mySeedColor,
tones: FlexTones.vividSurfaces(Brightness.dark).copyWith(surfaceTone: 20),
);
// For light legacy FlexTones.vividBackground
final ColorScheme vividBackgroundLight = SeedColorScheme.fromSeeds(
brightness: Brightness.light,
primaryKey: mySeedColor,
tones: FlexTones.vividBackground(Brightness.light).copyWith(surfaceTone: 98),
);
// For dark legacy FlexTones.vividBackground
final ColorScheme vividBackgroundDark = SeedColorScheme.fromSeeds(
brightness: Brightness.dark,
primaryKey: mySeedColor,
tones: FlexTones.vividBackground(Brightness.dark).copyWith(surfaceTone: 6),
);
July 13, 2024 CHORE * FIX the pub score. * Update readme.
July 13, 2024
CHORE
Experiment to find and remove references from the package to deprecated properties for scoring purposes. The deprecated colors are NOT used anymore, b…
July 12, 2024
CHORE
Removes the in Flutter 3.22.0 deprecated ColorScheme colors background, onBackground and surfaceVariant from being defined as a part of the SeedColorS…
July 12, 2024
CHANGE
Removes the in Flutter 3.22.0 deprecated ColorScheme colors background, onBackground and surfaceVariant from being defined as a part of the SeedColorScheme.fromSeeds result. They still get color values, but they are whatever the default values the default Flutter SDK ColorScheme() constructor gives them. These colors were deprecated in Flutter 3.22.0 and are now removed from being defined and accessed by FSS.
surface, onSurface and surfaceContainerLowest in Flutter 3.22.0 and later.
To make FlexTones.vividSurfaces and FlexTones.vividBackground have some distinguishing differences when background color no longer has any effect or usage, the following changes were made to their tone mappings:
FlexTones.vividSurfaces:
FlexTones.vividBackground:
How to use legacy FlexTones.vividSurfaces and FlexTones.vividBackground tone mappings?
FlexTones.vividSurfaces or FlexTones.vividBackground you can optionally recreate them with copyWith on their definitions like this:// For light legacy FlexTones.vividSurfaces
final ColorScheme vividSurfacesLight = SeedColorScheme.fromSeeds(
brightness: Brightness.light,
primaryKey: mySeedColor,
tones: FlexTones.vividSurfaces(Brightness.light).copyWith(surfaceTone: 95),
);
// For dark legacy FlexTones.vividSurfaces
final ColorScheme vividSurfacesDark = SeedColorScheme.fromSeeds(
brightness: Brightness.dark,
primaryKey: mySeedColor,
tones: FlexTones.vividSurfaces(Brightness.dark).copyWith(surfaceTone: 20),
);
// For light legacy FlexTones.vividBackground
final ColorScheme vividBackgroundLight = SeedColorScheme.fromSeeds(
brightness: Brightness.light,
primaryKey: mySeedColor,
tones: FlexTones.vividBackground(Brightness.light).copyWith(surfaceTone: 98),
);
// For dark legacy FlexTones.vividBackground
final ColorScheme vividBackgroundDark = SeedColorScheme.fromSeeds(
brightness: Brightness.dark,
primaryKey: mySeedColor,
tones: FlexTones.vividBackground(Brightness.dark).copyWith(surfaceTone: 6),
);
CHORE
all_lint_rules.yaml.EXAMPLE
background, onBackground and surfaceVariant in the example app.The mistakes were fixed. Tests were added to check the FlexTones.material3Legacy compared to the MCU deprecated Scheme-based colors, for colors that e…
June 24, 2024
Bring the bundled forked version of the package Material Color Utilities (MCU) to feature parity with version 0.12.0 of the original package. The internal fork for the first time nw also adds features and capabilities that do not exist in the original package. Previously FSS only bundled MCU to avoid version conflicts with Flutter SDK when using different channels. Different Flutter channels typically pin incompatible versions of MCU.
The bundled forked version of MCU also has more tests than the original, allowing us to detect when any new MCU version "silently" changes color results it produced in the past.
BREAKING
SeedColorScheme.buildDynamicScheme was changed to enable support for multiple seed colors on the MCU based DynamicScheme APIs and its extended schemes. For most normal use cases, you will not notice this, as it is quite a low-level API in FSS that end users normally do not use.NEW
The forked internal MCU version received new features. The DynamicScheme can now accept an optional customErrorPalette and then SchemeTonalSpot, SchemeContent, SchemeFidelity, SchemeExpressive, SchemeFruitSalad, SchemeMonochrome, SchemeNeutral, SchemeRainbow and SchemeVibrant that extend DynamicScheme all received properties to support individual seed colors for all tonal palettes.
The above addition enables SeedColorScheme.fromSeeds to support using all its key seed colors also when using MCU based DynamicScheme variants and not just for FlexTones based tones and variants. When using key seed colors with MCU variants, they still respect their original design intent.
Added support for contrastLevel to SeedColorScheme.fromSeeds. This allows you to set the desired contrast level of the generated color scheme when using SeedColorScheme.fromSeeds with the variant property, for variants that are based on MCU's DynamicScheme. Such variants have their isFlutterScheme set to true.
contrastLevel parameter indicates the contrast level between color pairs, such as primary and onPrimary.The value 0.0 is the default (normal); -1.0 is the lowest; 1.0 is the highest. From Material Design guideline, the medium and high-contrast levels correspond to 0.5 and 1.0 respectively.contrastLevel in Flutter SDK is not yet available in ColorScheme.fromSeed in Flutter stable 3.22.x, but is available on the master channel 3.23.x. With FSS you can use it already in Flutter 3.22.x.contrastLevel has no effect when using tones. However, with tones you can create custom tones with even more flexibility in seed generation to make schemes with higher or less contrast. Two pre-configured high contrast tones exist earlier via FlexTones.highContrast and FlexTones.ultraContrast.Updated MaterialDynamicColors to optionally use the new Material expressive on-colors spec for none surface on-container colors. This feature is not on by default. You can opt in on this new standard by setting useExpressiveOnContainerColors to true in SeedColorScheme.fromSeeds.
DynamicScheme variants and not when using FlexTones based tones and variants, plus it only applies to variants that are based on MCU's DynamicScheme. Such variants have their isFlutterScheme set to true.onPrimaryContainer, onSecondaryContainer, onTertiaryContainer and onErrorContainer from 10 to 30 making them more color expressive, but they also have less contrast.ContrastCurve(3, 4.5, 7, 11) instead of ContrastCurve(4.5, 7, 11, 21) for the on-container colors. Meaning normal contrast of 4.5 is now accepted when it was 7 before.MaterialDynamicColors used an older M3 spec. Flutter stable 3.22.x and Flutter master 3.23.x still use MCU versions lower than 0.12.0 and default to the older color tones 10 in light mode. This will be changed in Flutter SDK when Flutter is updated to use MCU 0.12.0 or later. With FSS 3.0.0, you can opt in on using the new spec already now. But FSS still also defaults to the older spec with more contrast. When Flutter stable changes to use the new spec, FSS will also change to use it as default. While Flutter and MCU will then no longer offer the older higher contrast version, FSS will continue to do so.The tones configuration class FlexTones got a new built-in modifier, monochromeSurfaces(). It can be applied to any predefined or custom FlexTones to make the surface colors monochrome and use pure greyscale for the neutral and neutral variant tonal palettes, with no color tint from their key color or primary key seed color.
The tones configuration class FlexTones also got the new modifier, expressiveOnContainer(). It can be applied to any predefined or custom FlexTones to make a returned FlexTones instance where the tones for light mode on container tones are set to 30 for more color expressive container text and icons on none surface containers.
onPrimaryContainerTone,onSecondaryContainerTone, onTertiaryContainerTone and onErrorContainerTone.FlexTones configuration. The expressive on-color in light mode containers are a new change to Material Design 3 ColorScheme. It was introduced in Material Color Utilities (MCU) package v0.12.0.SeedColorScheme.fromSeeds and its useExpressiveOnContainerColors to true when using MCU dynamic scheme variant based seeded color schemes.COLOR VALUE STYLE BREAKING
FlexTones.chroma tone secondaryTone from 60 to 50 in light mode for better chroma fidelity when using FlexTone.chroma in light mode.CHANGE
>=3.22.0 from >=3.22.0-0.3.pre that was only used by FSS dev release 2.1.0-dev.1. Since beta and master are now on 3.23.0 or higher versions, the >=3.22.0 constraint can now be used by master and beta channels without any issue.FlexSchemeVariant enum values.FIX
FlexTones.material3Legacy was corrected. It had some incorrect tones and chroma in its configuration. The mistakes were fixed. Tests were added to check the FlexTones.material3Legacy compared to the MCU deprecated Scheme-based colors, for colors that exist in both.This is a temp pre-release of FFS 2.1.0.
May 21, 2024
This is a temp pre-release of FFS 2.1.0.
FIX
>=3.22.0-0.3.pre, so that the package can also be used on beta and stable channels, while they are still on 3.22.0-a.b.pre versions, which is considered smaller than 3.22.0, used in the stable release of the package. You can use this version of the package if you need to use beta or master channel before they have been bumped to 3.23.x. This release is apart from the version constraint difference identical to the 2.0.0 release.The Material-3 ColorScheme colors background, onBackground and surfaceVariant have been deprecated since they are also deprecated in Flutter 3.22.
May 14, 2024
This release adds support for the revised Material-3 ColorScheme released in Flutter version 3.22.0 and for seeded scheme variants, that will arrive in the Flutter stable release after 3.22.x.
CHANGE
FlexPaletteType.extended tones got two new tones added, tone 2, and 24. It now has 27 tones.NEW
Support revised Material-3 ColorScheme with the new colors primaryFixed, primaryFixedDim, onPrimaryFixed, onPrimaryFixedVariant, secondaryFixed, secondaryFixedDim, onSecondaryFixed, onSecondaryFixedVariant, tertiaryFixed, tertiaryFixedDim, onTertiaryFixed, onTertiaryFixedVariant, surfaceDim, surfaceBright, surfaceContainerLowest, surfaceContainerLow, surfaceContainer, surfaceContainerHigh and surfaceContainerHighest.
New alternative way to specify the used seeding algorithm in SeedColorScheme.fromSeeds by providing new enum value FlexSchemeVariant to its variant property.
FlexTones, the variant property also supports using Flutter SDK, MCU based scheme variants tonalSpot, monochrome, neutral, vibrant, expressive, content,rainbow and fruitSalad in by specifying them in property variant in SeedColorScheme.fromSeeds. In Flutter 3.22 only the default tonalSpot is available, but with FSS you can use any of the other variants as well already in Flutter 3.22. The other variants are not yet available in Flutter 3.22, but they are available in the ColorScheme API in the master channel and will be available in Flutter ColorScheme.fromSeed in the next stable release after 3.22. With FSS you can use them already starting from Flutter 3.22.0.variants enum property you can also select built-in FlexTones that you could use before in SeedColorScheme.fromSeeds in tones. The FlexTones are still available and can be used as before, it has some advantages. With tones you can create customized seed extractions based on FlexTones and you can use tones surface quick modifiers, onMainsUseBW, onSurfacesUseBW and surfacesUseBW.variants, if the variant is one of the Flutter SDK/MCU variants, it will not use more than one key color, the primary as seed color. The FlexSchemeVariant that have their property isFlutterScheme set to true are part of the Flutter SDK/MCU variants.tonalSpot, fidelity, monochrome, neutral, vibrant, expressive, content, rainbow and fruitSalad.FlexSchemeVariant that have their property isFlutterScheme set to false are part of the FlexTones variants using the corresponding built-in FlexTones as seed extraction. The variants are material, material3Legacy, soft, vivid, vividSurfaces, highContrast, ultraContrast, jolly, vividBackground, oneHue, candyPop and chroma. The chroma option is similar to the new nice SDK/MCU one called fidelity, in that it follows chroma of seed color, with the added benefit that it can use a separate seed color for each tonal palette.variant and tones are mutually exclusive, you can only use one of them in SeedColorScheme.fromSeeds. Both can be unspecified, but if you specify one, the other must be unspecified/null.A new FlexTones.material3Legacy was added. This FlexTones configuration preserves and provides access to the seed generation used by Flutter prior to Flutter version 3.22 and as used by FlexTones.materialin FlexSeedScheme before version 2.0.0. If you in Flutter 3.22 and FlexSeedScheme 2.0.0 need to replicate this style you can use this FlexTones in SeedColorScheme.fromSeeds property tones or the FlexSchemeVariant.material3Legacy in variants.
BREAKING
ColorScheme colors background, onBackground and surfaceVariant have been deprecated since they are also deprecated in Flutter 3.22.
SeedColorScheme.fromSeeds and FlexTones, but they will be removed in a future release. They are replaced by surface, onSurface and surfaceContainerLowest. There are also many new surface colors, like surfaceDim, surfaceBright and surfaceContainerLowest in the new Material-3 ColorScheme in Flutter 3.22.ColorScheme colors background, onBackground and surfaceVariant may only be fully removed when they have been removed from the Flutter SDK stable channel. If later tests show they can be removed without breaking any styles earlier, they will be removed in a future release of this package, even if they are still available in the Flutter SDK stable channel. A future dev version may also remove them to provide compatibility with the Flutter master channel when they are removed there.BREAKING STYLES
All built-in FlexTones now use the paletteType extended via FlexPaletteType.extended as default for additional tone fidelity. This is used for compatibility with Flutter 3.22 and its revised ColorScheme.
The default tones for the built-in FlexTones have been adjusted to match the new Material-3 ColorScheme in Flutter 3.22. The new tones and default styles are marginally different but also better than in previous Flutter versions. If you need the result and style used in Flutter 3.19 and earlier, you can use the FlexTones.material3Legacy as tones in SeedColorScheme.fromSeeds to get the result FlexTones.material produced in FSS before version 2.0.0 and that was also the default in Flutter in version 3.19 and earlier.
The FlexSchemeVariant.tonalSpot is the variant that Flutter SDK uses from MCU in ColorScheme.fromSeed in Flutter 3.22 and later when you make seed generated color schemes with it. This generated scheme is different from the one ColorScheme.fromSeed generated in Flutter 3.19 and earlier. If you need the result and style used in Flutter 3.19 and earlier, you can use the material3Legacy as tones or variant in SeedColorScheme.fromSeeds to get the result FlexTones.material produced in FSS before version 2.0.0 and that was also the default in Flutter in version 3.19 and earlier when using ColorScheme.fromSeed.
The FlexTones.material has been updated and now produces the same result as tonalSpot in tests. There may be some edge cases where there are rounding differences. The material alternative can be used both in variant and tones. It provides the advantages over tonalSpot that since it is a FlexTones, it can use multiple seed colors and if used in tones, its results can be quick adjusted with onMainsUseBW, onSurfacesUseBW and surfacesUseBW. The tonalSpot is a Flutter SDK/MCU variant and does not support these customizations.
Nothing published for this version
Exposed Hct and ViewingConditions from the underlying Material Color Utilities (MCU) library. They are exposed for convenience, you no longer have to
April 3, 2024
Hct and ViewingConditions from the underlying Material Color Utilities (MCU) library. They are exposed for convenience, you no longer have to add and import (MCU) to use them.CODE_OF_CONDUCT.md and CONTRIBUTING.md files for guidance on contributing to the package.None breaking Changed APIs that now support using paletteType of FlexPaletteTypeare:
July 2, 2023
NEW
paletteType of FlexPaletteType and set it to FlexPaletteType.extended, by default its values FlexPaletteType.common resulting in the 15 tones [0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100] being produced as before.[0, 4, 5, 6, 10, 12, 17, 20, 22, 30, 40, 50, 60, 70, 80, 87, 90, 92, 94, 95, 96, 97, 98, 99, 100].paletteType of FlexPaletteTypeare:
FlexTonalPalette.ofFlexTonalPalette.fromListFlexCorePalette.ofFlexCorePalette.fromHueChromaFlexCorePalette.fromListFlexCorePalette.fromSeedsFlexTonesColorScheme, but since they are in the Material 3 spec, they will arrive at some later point.FlexTonalPalette, like MCU TonalPalette, caps chroma for tones higher than or equal to 90, to maximum chroma value of 40. In FlexTonalPalette this still applies when using FlexPaletteType.common, when you use the FlexPaletteType.extended, there is no chroma max cap on high tones, it uses fidelity mode for high tones. When using type FlexPaletteType.common the chroma of high tones (>= 90), is limited to maximum 40. This keeps the chromacity of tones 90 to 100, lower than 40. If the source uses has more chromacity than 40, there may be a sudden jump in chroma reduction at tone 90. This is the standard behavior for the original Material-3 tonal palette computation. The FlexPaletteType.common type is intended to be used when there is a need to follow strict M3's original palette design.FlexPaletteType.extended type tones, there are not only the new tones, but the chroma limit of tones >= 90 is also removed. This increases fidelity of higher tone when high chromacity is used.FlexToness, candyPop and chroma, they use the new FlexPaletteType.extended tonal palette.FlexTones modifier surfacesUseBW(). It can be used as a modifier to force any FlexTones seed strategy to use tone 100 (white) or tone 0 (black) as background and surface colors, depending on if they are dark or lightCHANGE
primaryContainerTone and secondaryContainerTone for light mode FlexTones.highContrast and FlexTones.ultraContrast were both changed from 95 to 90. This produces brighter and more punchy themes for these two high-contrast themes in light mode.CHORE
EXAMPLE
However, new Flutter stable 3.10 is still using MCU 0.2.0. If the MCU package stabilizes and improves its constant breaking changes, FSS may later aga…
May 11, 2023
INTERNAL CHANGE
It is now included and maintained as a separate forked code base in FSS, while keeping MCU's original license in place for its parts. The included MCU library was only modified to abide by the much stricter lint rules used in FSS. More unit tests for better test coverage of MCU were added as well.
Why is MCU included as a forked version baked into FSS?
The constant changes in MCU, with e.g., recent three different breaking-pinned zero-ver versions used in Flutter stable, beta and master channels, made it hopeless to depend on MCU. Using it caused repeated version conflicts with Flutter's own pinned dependency on different breaking versions of it, in different Flutter channels. FSS needs to be able to work across all Flutter channels without constant hassle caused by MCU and which exact version of it different version of Flutter repo itself is pinned to.
The included forked version will be kept in sync with the original and updated when needed. Currently included MCU version is 0.5.0, the latest one, which is what Flutter master channel currently uses. However, new Flutter stable 3.10 is still using MCU 0.2.0. If the MCU package stabilizes and improves its constant breaking changes, FSS may later again be changed to depend on the original package. Until then, it embeds the code for it in its package to avoid the version conflict hassles it has repeatedly caused. These changes are all internal to the FSS package and do not affect how it works.
NEW
Blend, CorePalette and TonalPalette from MCU. Previously only Cam16 was exposed. These APIs from MCU are exposed because FlexColorScheme (FCS) uses them. By exposing these APIs from the included MCU in FSS, it also no longer has any dependency on the MCU package that Flutter depends on. This makes it easier for the latest release of FCS to also work on all current Flutter channels.Future versions of FSS may expose a few more APIs from MCU, but more likely it will offer a few new alternative ones with its own twist. Like it is for example, doing with SeedColorScheme.fromSeeds.
Bumped Flutter sdk version constraint to >=2.19.0 <4.0.0 (from >=2.18.0 <3.0.0)
Apr 16, 2023
>=2.19.0 <4.0.0 (from >=2.18.0 <3.0.0)material_color_utilities version constraint to >=0.2.0 <0.4.0 from ^0.2.0.These changes enable the package to be used on current Flutter stable 3.7 versions, as well as the latest 3.10.x versions on channels beta and master. It will also work with the next stable Flutter release after 3.7.
FIX: Version 1.2.0 unintentionally introduced a lower level breaking API from version 1.1.0. This release relaxes the API and fixes the breakage.
Mar 19, 2023
Add example screenshots to pubspec.yaml.
Jan 30, 2023
Jan 25, 2023 - Fix date on 1.2.0 changelog.
Jan 25, 2023
Requires minimum Flutter 3.7.0. Now support outlineVariant and scrim colors in ColorScheme in Flutter stable 3.7.0 and later.
Jan 25, 2023
Requires minimum Flutter 3.7.0. Now support outlineVariant and scrim colors in ColorScheme in Flutter stable 3.7.0 and later.
This release also adds new features to allow customization of seed generation of error, neutral and neutral variant tonal palettes. All listed features are unchanged from the previous dev pre-release 1.2.0-dev.1.
NEW
Adds support for outlineVariant and scrim colors in ColorScheme.
Added support for customizing seed generation for error, neutral and neutral variant tonal palettes.
To support the new features the SeedColorScheme.fromSeeds got the following new Color properties errorKey, neutralKey and neutralVariantKey.
The FlexTones class got the following new double properties
errorChroma, errorMinChroma, neutralMinChroma and neutralVariantMinChroma
The FlexCorePalette.fromSeeds factory got the following new int properties error, neutral, neutralVariant and neutralVariantMinChroma. As well as new double properties errorChroma, errorMinChroma, neutralChroma, neutralMinChroma, neutralVariantChroma and neutralVariantMinChroma.
The demo application got an About dialog. The demo app also shows the ColorScheme applied on common Material components.
Requires minimum Flutter 3.7.0-1.2.pre (beta channel). This is a development pre-release to support outlineVariant and scrim colors in ColorScheme. It
Dec 23, 2022
Requires minimum Flutter 3.7.0-1.2.pre (beta channel). This is a development pre-release to support outlineVariant and scrim colors in ColorScheme. It is used for development and testing against new Material 3 features in Flutter 3.7 beta and master channel. It will be released as a stable version when the new color properties land in the Flutter stable channel, most likely after January 25, 2023.
The release also adds new features to allow customization of seed generation of error, neutral and neutral variant tonal palettes.
NEW
Adds support for outlineVariant and scrim colors in ColorScheme.
Added support for customizing seed generation for error, neutral and neutral variant tonal palettes.
To support the new features the SeedColorScheme.fromSeeds got the following new Color properties errorKey, neutralKey and neutralVariantKey.
The FlexTones class got the following new double properties
errorChroma, errorMinChroma, neutralMinChroma and neutralVariantMinChroma
The FlexCorePalette.fromSeeds factory got the following new int properties error, neutral, neutralVariant and neutralVariantMinChroma. As well as new double properties errorChroma, errorMinChroma, neutralChroma, neutralMinChroma, neutralVariantChroma and neutralVariantMinChroma.
The demo application got an About dialog. The demo app also shows the ColorScheme applied on common Material components.
Added new FlexTones method onMainsUseBW, that can return a new instance of its configurations with tone mapping for its main on* colors set to tone, 0
Nov 17, 2022
NEW
Added new FlexTones method onMainsUseBW, that can return a new instance of its configurations with tone mapping for its main *on colors set to tone, 0 (black) or 100 (white), depending on what is appropriate for its main color tones. The main colors are primary, secondary, tertiary, error and their containers. The method works on any configured FlexTones, also custom ones, not only the built-in ones.
Added new FlexTones method onSurfacesUseBW, that can return a new instance of its configurations with tone mapping for its surface *on colors set to tone, 0 (black) or 100 (white), depending on what is appropriate for its surface color tones. Surface colors are background, surface, surfaceVariant and inverseSurface. The method works on any configured FlexTones, also custom ones, not only the built-in ones.
To be able to support creating mono-hue seeded color schemes, the FlexCorePalette.fromSeeds got a new property
tertiaryHueRotation. It controls the used hue rotation degrees from primary key color, that is used when a tertiary seed key color is not provided. The tertiaryHueRotation defaults 60 degrees, same as previously from Material 3 color system hard-coded value.
Added two new FlexTones.
FlexTones.oneHue that set tertiaryHueRotation to 0, so we can create a mono hue palette if we only provide primary key color as seed.FlexTones.vividBackground that is a copy of FlexTones.vividSurfaces but with tone mapping for background and surface swapped.CHANGE
Tone mappings for some pre-configured FlexTones were slightly modified. They now produce improved and more usable color schemes. Most significantly, the mappings for FlexTones.vividSurfaces were modified to provide a more usable and improved vivid surfaces tinted color scheme, while still offering a slightly more tinted surface design than FlexTones.vivid. Tone mapping changes are as follows:
FlexTones.vivid, brightness light:
surfaceTone was changed from 99 to 98.FlexTones.vivid, brightness dark:
onErrorContainerTone was changed from 90 to 80 (dark M3 default).backgroundTone was changed from 10 to 5.FlexTones.vividSurfaces brightness light:
onPrimaryTone was changed from 95 to 98.onSecondaryTone was changed from 95 to 98.onTertiaryTone was changed from 95 to 98.onErrorTone was changed from 95 to 98.primaryContainerTone was changed from 80 to 90 (light M3 default).secondaryContainerTone was changed from 80 to 90 (light M3 default).tertiaryContainerTone was changed from 80 to 90 (light M3 default).errorContainerTone was changed from 80 to 90 (light M3 default).surfaceVariantTone was changed from 80 to 90 (light M3 default).backgroundTone was changed from 90 to 98.neutralChroma was changed from 8 to 5.neutralVariantChroma was changed from 16 to 10.FlexTones.vividSurfaces brightness dark:
primaryContainerTone was changed from 40 to 20.tertiaryContainerTone was changed from 40 to 30 (dark M3 default).primaryContainerTone was changed from 40 to 30 (dark M3 default).onErrorTone was changed from 20 to 30 (dark M3 default).onErrorContainerTone was changed from 90 to 80 (dark M3 default).surfaceTone was changed from 10 to 20.surfaceVariantTone was changed from 40 to 30 (dark M3 default).backgroundTone was changed from 20 to 10.onSurfaceVariantTone was changed from 90 to 95.onInverseSurfaceTone was changed from 30 to 20 (dark M3 default).neutralChroma was changed from 8 to 5.neutralVariantChroma was changed from 16 to 10.FlexTones.ultraContrast brightness light:
primaryTone was changed from 30 to 20.FlexTones.ultraContrast brightness dark:
surfaceTone was changed from 10 to 5.backgroundTone was changed from 10 to 5.Readme: Removed old notice about package being a beta release and using Flutter 3.3 beta.
Sep 2, 2022
DOCS
EXAMPLE
FlexTones options.Updated minimum dependencies to Dart >=2.18.0 and Flutter >= 3.3.0.
Aug 30, 2022
First stable release.
From Material Color utilities export and show Cam16.
Aug 28, 2022
NEW
Cam16.Add customization possibility of error tonal palette to the default FlexTonalPalette constructor.
Aug 27, 2022
NEW
error tonal palette to the default FlexTonalPalette
constructor.BREAKING
FlexTonalPalette method asList and constructor fromList, now include the values of the error color in produced asList, and as required values in fromList.Aug 27, 2022 * Fix pub points.
Aug 27, 2022
Relax version constraint to make it work on beta 3.3.0-0.3.pre and later.
Aug 27, 2022
ColorScheme colors scrim and outlineVariant.First dev release of the package.
Aug 26, 2022
Your coding agent can read these notes before it upgrades. Set up the MCP server →