buildDynamicScheme static method

DynamicScheme buildDynamicScheme({
  1. required Brightness brightness,
  2. required FlexSchemeVariant variant,
  3. required Color primarySeedColor,
  4. Color? secondarySeedColor,
  5. Color? tertiarySeedColor,
  6. Color? errorSeedColor,
  7. Color? neutralSeedColor,
  8. Color? neutralVariantSeedColor,
  9. double contrastLevel = 0.0,
  10. bool useExpressiveOnContainerColors = false,
  11. 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),
      ),
  };
}