lerp method

Linear interpolation between two tokens

Implementation

FlyColorToken lerp(FlyColorToken other, double t) {
  final result = <String, Color>{};
  final allKeys = {..._allValues.keys, ...other._allValues.keys};

  for (final key in allKeys) {
    final valueA = _allValues[key];
    final valueB = other._allValues[key];
    if (valueA != null && valueB != null) {
      result[key] = Color.lerp(valueA, valueB, t) ?? valueA;
    } else if (valueA != null) {
      result[key] = valueA;
    } else if (valueB != null) {
      result[key] = valueB;
    }
  }

  return FlyColorToken(
    red50: result['red50']!,
    red100: result['red100']!,
    red200: result['red200']!,
    red300: result['red300']!,
    red400: result['red400']!,
    red500: result['red500']!,
    red600: result['red600']!,
    red700: result['red700']!,
    red800: result['red800']!,
    red900: result['red900']!,
    red950: result['red950']!,
    orange50: result['orange50']!,
    orange100: result['orange100']!,
    orange200: result['orange200']!,
    orange300: result['orange300']!,
    orange400: result['orange400']!,
    orange500: result['orange500']!,
    orange600: result['orange600']!,
    orange700: result['orange700']!,
    orange800: result['orange800']!,
    orange900: result['orange900']!,
    orange950: result['orange950']!,
    amber50: result['amber50']!,
    amber100: result['amber100']!,
    amber200: result['amber200']!,
    amber300: result['amber300']!,
    amber400: result['amber400']!,
    amber500: result['amber500']!,
    amber600: result['amber600']!,
    amber700: result['amber700']!,
    amber800: result['amber800']!,
    amber900: result['amber900']!,
    amber950: result['amber950']!,
    yellow50: result['yellow50']!,
    yellow100: result['yellow100']!,
    yellow200: result['yellow200']!,
    yellow300: result['yellow300']!,
    yellow400: result['yellow400']!,
    yellow500: result['yellow500']!,
    yellow600: result['yellow600']!,
    yellow700: result['yellow700']!,
    yellow800: result['yellow800']!,
    yellow900: result['yellow900']!,
    yellow950: result['yellow950']!,
    lime50: result['lime50']!,
    lime100: result['lime100']!,
    lime200: result['lime200']!,
    lime300: result['lime300']!,
    lime400: result['lime400']!,
    lime500: result['lime500']!,
    lime600: result['lime600']!,
    lime700: result['lime700']!,
    lime800: result['lime800']!,
    lime900: result['lime900']!,
    lime950: result['lime950']!,
    green50: result['green50']!,
    green100: result['green100']!,
    green200: result['green200']!,
    green300: result['green300']!,
    green400: result['green400']!,
    green500: result['green500']!,
    green600: result['green600']!,
    green700: result['green700']!,
    green800: result['green800']!,
    green900: result['green900']!,
    green950: result['green950']!,
    emerald50: result['emerald50']!,
    emerald100: result['emerald100']!,
    emerald200: result['emerald200']!,
    emerald300: result['emerald300']!,
    emerald400: result['emerald400']!,
    emerald500: result['emerald500']!,
    emerald600: result['emerald600']!,
    emerald700: result['emerald700']!,
    emerald800: result['emerald800']!,
    emerald900: result['emerald900']!,
    emerald950: result['emerald950']!,
    teal50: result['teal50']!,
    teal100: result['teal100']!,
    teal200: result['teal200']!,
    teal300: result['teal300']!,
    teal400: result['teal400']!,
    teal500: result['teal500']!,
    teal600: result['teal600']!,
    teal700: result['teal700']!,
    teal800: result['teal800']!,
    teal900: result['teal900']!,
    teal950: result['teal950']!,
    cyan50: result['cyan50']!,
    cyan100: result['cyan100']!,
    cyan200: result['cyan200']!,
    cyan300: result['cyan300']!,
    cyan400: result['cyan400']!,
    cyan500: result['cyan500']!,
    cyan600: result['cyan600']!,
    cyan700: result['cyan700']!,
    cyan800: result['cyan800']!,
    cyan900: result['cyan900']!,
    cyan950: result['cyan950']!,
    sky50: result['sky50']!,
    sky100: result['sky100']!,
    sky200: result['sky200']!,
    sky300: result['sky300']!,
    sky400: result['sky400']!,
    sky500: result['sky500']!,
    sky600: result['sky600']!,
    sky700: result['sky700']!,
    sky800: result['sky800']!,
    sky900: result['sky900']!,
    sky950: result['sky950']!,
    blue50: result['blue50']!,
    blue100: result['blue100']!,
    blue200: result['blue200']!,
    blue300: result['blue300']!,
    blue400: result['blue400']!,
    blue500: result['blue500']!,
    blue600: result['blue600']!,
    blue700: result['blue700']!,
    blue800: result['blue800']!,
    blue900: result['blue900']!,
    blue950: result['blue950']!,
    indigo50: result['indigo50']!,
    indigo100: result['indigo100']!,
    indigo200: result['indigo200']!,
    indigo300: result['indigo300']!,
    indigo400: result['indigo400']!,
    indigo500: result['indigo500']!,
    indigo600: result['indigo600']!,
    indigo700: result['indigo700']!,
    indigo800: result['indigo800']!,
    indigo900: result['indigo900']!,
    indigo950: result['indigo950']!,
    violet50: result['violet50']!,
    violet100: result['violet100']!,
    violet200: result['violet200']!,
    violet300: result['violet300']!,
    violet400: result['violet400']!,
    violet500: result['violet500']!,
    violet600: result['violet600']!,
    violet700: result['violet700']!,
    violet800: result['violet800']!,
    violet900: result['violet900']!,
    violet950: result['violet950']!,
    purple50: result['purple50']!,
    purple100: result['purple100']!,
    purple200: result['purple200']!,
    purple300: result['purple300']!,
    purple400: result['purple400']!,
    purple500: result['purple500']!,
    purple600: result['purple600']!,
    purple700: result['purple700']!,
    purple800: result['purple800']!,
    purple900: result['purple900']!,
    purple950: result['purple950']!,
    fuchsia50: result['fuchsia50']!,
    fuchsia100: result['fuchsia100']!,
    fuchsia200: result['fuchsia200']!,
    fuchsia300: result['fuchsia300']!,
    fuchsia400: result['fuchsia400']!,
    fuchsia500: result['fuchsia500']!,
    fuchsia600: result['fuchsia600']!,
    fuchsia700: result['fuchsia700']!,
    fuchsia800: result['fuchsia800']!,
    fuchsia900: result['fuchsia900']!,
    fuchsia950: result['fuchsia950']!,
    pink50: result['pink50']!,
    pink100: result['pink100']!,
    pink200: result['pink200']!,
    pink300: result['pink300']!,
    pink400: result['pink400']!,
    pink500: result['pink500']!,
    pink600: result['pink600']!,
    pink700: result['pink700']!,
    pink800: result['pink800']!,
    pink900: result['pink900']!,
    pink950: result['pink950']!,
    rose50: result['rose50']!,
    rose100: result['rose100']!,
    rose200: result['rose200']!,
    rose300: result['rose300']!,
    rose400: result['rose400']!,
    rose500: result['rose500']!,
    rose600: result['rose600']!,
    rose700: result['rose700']!,
    rose800: result['rose800']!,
    rose900: result['rose900']!,
    rose950: result['rose950']!,
    slate50: result['slate50']!,
    slate100: result['slate100']!,
    slate200: result['slate200']!,
    slate300: result['slate300']!,
    slate400: result['slate400']!,
    slate500: result['slate500']!,
    slate600: result['slate600']!,
    slate700: result['slate700']!,
    slate800: result['slate800']!,
    slate900: result['slate900']!,
    slate950: result['slate950']!,
    gray50: result['gray50']!,
    gray100: result['gray100']!,
    gray200: result['gray200']!,
    gray300: result['gray300']!,
    gray400: result['gray400']!,
    gray500: result['gray500']!,
    gray600: result['gray600']!,
    gray700: result['gray700']!,
    gray800: result['gray800']!,
    gray900: result['gray900']!,
    gray950: result['gray950']!,
    zinc50: result['zinc50']!,
    zinc100: result['zinc100']!,
    zinc200: result['zinc200']!,
    zinc300: result['zinc300']!,
    zinc400: result['zinc400']!,
    zinc500: result['zinc500']!,
    zinc600: result['zinc600']!,
    zinc700: result['zinc700']!,
    zinc800: result['zinc800']!,
    zinc900: result['zinc900']!,
    zinc950: result['zinc950']!,
    neutral50: result['neutral50']!,
    neutral100: result['neutral100']!,
    neutral200: result['neutral200']!,
    neutral300: result['neutral300']!,
    neutral400: result['neutral400']!,
    neutral500: result['neutral500']!,
    neutral600: result['neutral600']!,
    neutral700: result['neutral700']!,
    neutral800: result['neutral800']!,
    neutral900: result['neutral900']!,
    neutral950: result['neutral950']!,
    stone50: result['stone50']!,
    stone100: result['stone100']!,
    stone200: result['stone200']!,
    stone300: result['stone300']!,
    stone400: result['stone400']!,
    stone500: result['stone500']!,
    stone600: result['stone600']!,
    stone700: result['stone700']!,
    stone800: result['stone800']!,
    stone900: result['stone900']!,
    stone950: result['stone950']!,
    black: result['black']!,
    white: result['white']!,
    extras: Map.fromEntries(
      result.entries.where(
        (e) => ![
          'red50',
          'red100',
          'red200',
          'red300',
          'red400',
          'red500',
          'red600',
          'red700',
          'red800',
          'red900',
          'red950',
          'orange50',
          'orange100',
          'orange200',
          'orange300',
          'orange400',
          'orange500',
          'orange600',
          'orange700',
          'orange800',
          'orange900',
          'orange950',
          'amber50',
          'amber100',
          'amber200',
          'amber300',
          'amber400',
          'amber500',
          'amber600',
          'amber700',
          'amber800',
          'amber900',
          'amber950',
          'yellow50',
          'yellow100',
          'yellow200',
          'yellow300',
          'yellow400',
          'yellow500',
          'yellow600',
          'yellow700',
          'yellow800',
          'yellow900',
          'yellow950',
          'lime50',
          'lime100',
          'lime200',
          'lime300',
          'lime400',
          'lime500',
          'lime600',
          'lime700',
          'lime800',
          'lime900',
          'lime950',
          'green50',
          'green100',
          'green200',
          'green300',
          'green400',
          'green500',
          'green600',
          'green700',
          'green800',
          'green900',
          'green950',
          'emerald50',
          'emerald100',
          'emerald200',
          'emerald300',
          'emerald400',
          'emerald500',
          'emerald600',
          'emerald700',
          'emerald800',
          'emerald900',
          'emerald950',
          'teal50',
          'teal100',
          'teal200',
          'teal300',
          'teal400',
          'teal500',
          'teal600',
          'teal700',
          'teal800',
          'teal900',
          'teal950',
          'cyan50',
          'cyan100',
          'cyan200',
          'cyan300',
          'cyan400',
          'cyan500',
          'cyan600',
          'cyan700',
          'cyan800',
          'cyan900',
          'cyan950',
          'sky50',
          'sky100',
          'sky200',
          'sky300',
          'sky400',
          'sky500',
          'sky600',
          'sky700',
          'sky800',
          'sky900',
          'sky950',
          'blue50',
          'blue100',
          'blue200',
          'blue300',
          'blue400',
          'blue500',
          'blue600',
          'blue700',
          'blue800',
          'blue900',
          'blue950',
          'indigo50',
          'indigo100',
          'indigo200',
          'indigo300',
          'indigo400',
          'indigo500',
          'indigo600',
          'indigo700',
          'indigo800',
          'indigo900',
          'indigo950',
          'violet50',
          'violet100',
          'violet200',
          'violet300',
          'violet400',
          'violet500',
          'violet600',
          'violet700',
          'violet800',
          'violet900',
          'violet950',
          'purple50',
          'purple100',
          'purple200',
          'purple300',
          'purple400',
          'purple500',
          'purple600',
          'purple700',
          'purple800',
          'purple900',
          'purple950',
          'fuchsia50',
          'fuchsia100',
          'fuchsia200',
          'fuchsia300',
          'fuchsia400',
          'fuchsia500',
          'fuchsia600',
          'fuchsia700',
          'fuchsia800',
          'fuchsia900',
          'fuchsia950',
          'pink50',
          'pink100',
          'pink200',
          'pink300',
          'pink400',
          'pink500',
          'pink600',
          'pink700',
          'pink800',
          'pink900',
          'pink950',
          'rose50',
          'rose100',
          'rose200',
          'rose300',
          'rose400',
          'rose500',
          'rose600',
          'rose700',
          'rose800',
          'rose900',
          'rose950',
          'slate50',
          'slate100',
          'slate200',
          'slate300',
          'slate400',
          'slate500',
          'slate600',
          'slate700',
          'slate800',
          'slate900',
          'slate950',
          'gray50',
          'gray100',
          'gray200',
          'gray300',
          'gray400',
          'gray500',
          'gray600',
          'gray700',
          'gray800',
          'gray900',
          'gray950',
          'zinc50',
          'zinc100',
          'zinc200',
          'zinc300',
          'zinc400',
          'zinc500',
          'zinc600',
          'zinc700',
          'zinc800',
          'zinc900',
          'zinc950',
          'neutral50',
          'neutral100',
          'neutral200',
          'neutral300',
          'neutral400',
          'neutral500',
          'neutral600',
          'neutral700',
          'neutral800',
          'neutral900',
          'neutral950',
          'stone50',
          'stone100',
          'stone200',
          'stone300',
          'stone400',
          'stone500',
          'stone600',
          'stone700',
          'stone800',
          'stone900',
          'stone950',
          'black',
          'white',
        ].contains(e.key),
      ),
    ),
  );
}