lerp method

Linear interpolation between two tokens

Implementation

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

  for (final key in allKeys) {
    final valueA = _allValues[key];
    final valueB = other._allValues[key];
    final numA = valueA ?? 0.0;
    final numB = valueB ?? 0.0;
    result[key] = numA + (numB - numA) * t;
  }

  return FlySpacingToken(
    base: result['base']!,
    px: result['px']!,
    s0: result['s0']!,
    s05: result['s05']!,
    s1: result['s1']!,
    s15: result['s15']!,
    s2: result['s2']!,
    s25: result['s25']!,
    s3: result['s3']!,
    s35: result['s35']!,
    s4: result['s4']!,
    s5: result['s5']!,
    s6: result['s6']!,
    s7: result['s7']!,
    s8: result['s8']!,
    s9: result['s9']!,
    s10: result['s10']!,
    s11: result['s11']!,
    s12: result['s12']!,
    s14: result['s14']!,
    s16: result['s16']!,
    s20: result['s20']!,
    s24: result['s24']!,
    s28: result['s28']!,
    s32: result['s32']!,
    s36: result['s36']!,
    s40: result['s40']!,
    s44: result['s44']!,
    s48: result['s48']!,
    s52: result['s52']!,
    s56: result['s56']!,
    s60: result['s60']!,
    s64: result['s64']!,
    s72: result['s72']!,
    s80: result['s80']!,
    s96: result['s96']!,
    extras: Map.fromEntries(
      result.entries.where(
        (e) => ![
          'base',
          'px',
          's0',
          's05',
          's1',
          's15',
          's2',
          's25',
          's3',
          's35',
          's4',
          's5',
          's6',
          's7',
          's8',
          's9',
          's10',
          's11',
          's12',
          's14',
          's16',
          's20',
          's24',
          's28',
          's32',
          's36',
          's40',
          's44',
          's48',
          's52',
          's56',
          's60',
          's64',
          's72',
          's80',
          's96',
        ].contains(e.key),
      ),
    ),
  );
}