tryCoerce<T> method

dynamic tryCoerce<T>(
  1. dynamic value
)

Implementation

dynamic tryCoerce<T>(dynamic value) {
  if (value == null) {
    return null;
  }

  if (value is T) {
    return value as T;
  }

  if (value is double && T == int) {
    var intVal = value.round();
    return intVal as T;
  }

  if (value is int && T == double) {
    var floatVal = value.toDouble();
    return floatVal as T;
  }

  if (value is int && T == bool) {
    var intVal = value;
    return intVal == 0 ? false : true as T;
  }

  if (value is bool && T == int) {
    bool boolVal = value;
    return boolVal ? 1 : 0;
  }

  if (T == String) {
    return value.toString() as T;
  }

  assert(
      false,
      'Failed to cast ' +
          value.runtimeType.toString() +
          ' to ' +
          value.toString());

  return null;
}