valueAsInt<T extends int?> static method

T valueAsInt<T extends int?>(
  1. Object? value, {
  2. bool allowHex = false,
  3. bool allowDouble = false,
})

Implementation

static T valueAsInt<T extends int?>(Object? value,
    {bool allowHex = false, bool allowDouble = false}) {
  if (value is T) return value;
  if (value == null && _isNull<T>()) return null as T;

  int? parse(num v) {
    if (v is int) return v;
    if (allowDouble == true) return v.toInt();
    if (!allowDouble && v == v.truncateToDouble()) {
      return v.toInt();
    }
    return null;
  }

  if (value is num) {
    final v = parse(value);
    if (v != null) return v as T;
  }

  if (value is String) {
    final n = num.tryParse(value);
    if (n != null) {
      final v = parse(n);
      if (v != null) return v as T;
    }
  }

  final toInt = IntUtils.tryParse(value, allowHex: allowHex);
  if (toInt == null) {
    throw JSONHelperException("Failed to parse value as int.",
        details: {"value": value});
  }
  return toInt as T;
}