buildDynamicScheme static method
DynamicScheme
buildDynamicScheme({
- required Brightness brightness,
- required FlexSchemeVariant variant,
- required Color primarySeedColor,
- Color? secondarySeedColor,
- Color? tertiarySeedColor,
- Color? errorSeedColor,
- Color? neutralSeedColor,
- Color? neutralVariantSeedColor,
- double contrastLevel = 0.0,
- bool useExpressiveOnContainerColors = false,
- bool respectMonochromeSeed = false,
Build one of the Flutter SDK defined DynamicScheme variants.
If used with a FlexTones based FlexSchemeVariant variant it returns tonalSpot, the default Material-3 SDK style.
Implementation
static DynamicScheme buildDynamicScheme({
required Brightness brightness,
required FlexSchemeVariant variant,
required Color primarySeedColor,
Color? secondarySeedColor,
Color? tertiarySeedColor,
Color? errorSeedColor,
Color? neutralSeedColor,
Color? neutralVariantSeedColor,
double contrastLevel = 0.0,
bool useExpressiveOnContainerColors = false,
bool respectMonochromeSeed = false,
}) {
assert(
contrastLevel >= -1.0 && contrastLevel <= 1.0,
'contrastLevel must be between [-1.0 to 1.0].',
);
final bool isDark = brightness == Brightness.dark;
final Hct primarySourceColor = Hct.fromInt(primarySeedColor.value32bit);
final Hct? secondarySourceColor = secondarySeedColor != null
? Hct.fromInt(secondarySeedColor.value32bit)
: null;
final Hct? tertiarySourceColor = tertiarySeedColor != null
? Hct.fromInt(tertiarySeedColor.value32bit)
: null;
final Hct? neutralSourceColor = neutralSeedColor != null
? Hct.fromInt(neutralSeedColor.value32bit)
: null;
final Hct? neutralVariantSourceColor = neutralVariantSeedColor != null
? Hct.fromInt(neutralVariantSeedColor.value32bit)
: null;
final Hct? errorSourceColor =
errorSeedColor != null ? Hct.fromInt(errorSeedColor.value32bit) : null;
return switch (variant) {
FlexSchemeVariant.material ||
FlexSchemeVariant.material3Legacy ||
FlexSchemeVariant.soft ||
FlexSchemeVariant.vivid ||
FlexSchemeVariant.vividSurfaces ||
FlexSchemeVariant.highContrast ||
FlexSchemeVariant.ultraContrast ||
FlexSchemeVariant.jolly ||
FlexSchemeVariant.vividBackground ||
FlexSchemeVariant.oneHue ||
FlexSchemeVariant.candyPop ||
FlexSchemeVariant.chroma ||
FlexSchemeVariant.tonalSpot =>
SchemeTonalSpot(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.fidelity => SchemeFidelity(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.content => SchemeContent(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.monochrome => SchemeMonochrome(
sourceColorHct: primarySourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
),
FlexSchemeVariant.neutral => SchemeNeutral(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.vibrant => SchemeVibrant(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.expressive => SchemeExpressive(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.rainbow => SchemeRainbow(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
FlexSchemeVariant.fruitSalad => SchemeFruitSalad(
sourceColorHct: primarySourceColor,
secondarySourceColorHct: secondarySourceColor,
tertiarySourceColorHct: tertiarySourceColor,
neutralSourceColorHct: neutralSourceColor,
neutralVariantSourceColorHct: neutralVariantSourceColor,
errorSourceColorHct: errorSourceColor,
isDark: isDark,
contrastLevel: contrastLevel,
useExpressiveOnContainerColors: useExpressiveOnContainerColors,
respectMonochromeSeed: respectMonochromeSeed,
isPrimaryMonochrome: _isMonochrome(primarySeedColor),
isSecondaryMonochrome:
_isMonochrome(secondarySeedColor ?? primarySeedColor),
isTertiaryMonochrome:
_isMonochrome(tertiarySeedColor ?? primarySeedColor),
isNeutralMonochrome:
_isMonochrome(neutralSeedColor ?? primarySeedColor),
isNeutralVariantMonochrome:
_isMonochrome(neutralVariantSeedColor ?? primarySeedColor),
isErrorMonochrome:
errorSeedColor != null && _isMonochrome(errorSeedColor),
),
};
}