convert<T> function

dynamic convert<T>(
  1. T from,
  2. T to,
  3. dynamic value
)

Convert the types

Set T the type you want to convert. All values must not be null. from and to must have the same type: T

Basic usage:

main() {
 // Convert 25°C into Fahrenheit
 final temperature = convert<Temperature>(
   Temperature.celcius, // from
   Temperature.fahrenheit, // to
   25, // value
 );
 print(temperature);
}

Supported convertions:

  • ✔️ Area
  • ✔️ Data Transfer Rate
  • ✔️ Energy
  • ✔️ Frequency
  • ✔️ Fuel Economy
  • ✔️ Length
  • ✔️ Mass
  • ✔️ Plane Angle
  • ✔️ Pressure
  • ✔️ Speed
  • ✔️ Temperature
  • ✔️ Time
  • ✔️ Volume
  • ❌ Colors

Useful links:

Implementation

dynamic convert<T>(T from, T to, dynamic value) {
  assert(from != null);
  assert(to != null);
  assert(value != null);
  assert(from is T);
  assert(to is T);
  assert(from.runtimeType == to.runtimeType);

  // ignore: omit_local_variable_types
  final bool Function<T>() isType = <T>() => from is T;

  if (isType<Temperature>()) {
    assert(value is num);
    return convertTemperature(
      (from as Temperature),
      (to as Temperature),
      value.toDouble(),
    );
  } else if (isType<Length>()) {
    assert(value is num);
    return convertLength(
      (from as Length),
      (to as Length),
      value.toDouble(),
    );
  } else if (isType<FuelEconomy>()) {
    assert(value is num);
    return convertFuelEconomy(
      (from as FuelEconomy),
      (to as FuelEconomy),
      value.toDouble(),
    );
  } else if (isType<Frequency>()) {
    assert(value is num);
    return convertFrequency(
      (from as Frequency),
      (to as Frequency),
      value.toDouble(),
    );
  } else if (isType<Mass>()) {
    assert(value is num);
    return convertMass(
      (from as Mass),
      (to as Mass),
      value.toDouble(),
    );
  } else if (isType<Area>()) {
    assert(value is num);
    return convertArea(
      (from as Area),
      (to as Area),
      value.toDouble(),
    );
  } else if (isType<Speed>()) {
    assert(value is num);
    return convertSpeed(
      (from as Speed),
      (to as Speed),
      value.toDouble(),
    );
  } else if (isType<Pressure>()) {
    assert(value is num);
    return convertPressure(
      (from as Pressure),
      (to as Pressure),
      value.toDouble(),
    );
  } else if (isType<Time>()) {
    assert(value is num);
    return convertTime(
      (from as Time),
      (to as Time),
      value.toDouble(),
    );
  } else if (isType<PlaneAngle>()) {
    assert(value is num);
    return convertPlaneAngle(
      (from as PlaneAngle),
      (to as PlaneAngle),
      value.toDouble(),
    );
  } else if (isType<Energy>()) {
    assert(value is num);
    return convertEnergy(
      (from as Energy),
      (to as Energy),
      value.toDouble(),
    );
  } else if (isType<DataTransferRate>()) {
    assert(value is num);
    return convertDataTransferRate(
      (from as DataTransferRate),
      (to as DataTransferRate),
      value.toDouble(),
    );
  } else if (isType<Volume>()) {
    assert(value is num);
    return convertVolume(
      (from as Volume),
      (to as Volume),
      value.toDouble(),
    );
  } else if (isType<DigitalStorage>()) {
    assert(value is num);
    return convertDigitalStorage(
      (from as DigitalStorage),
      (to as DigitalStorage),
      value.toDouble(),
    );
  } else {
    throw UnsupportedError('Type $T is not a supported convertion type');
  }
  // return value;
}