letOrNull<T> function
T?
letOrNull<T>(
- dynamic input
Let's you convert input
to a T
type if possible, or returns null if the
conversion cannot be performed.
Supported types:
- bool
- double
- int
- num
- String
- DateTime
- Duration
- FirestoreTimestamp (copy of Timestamp)
- Uri
Implementation
T? letOrNull<T>(dynamic input) {
try {
if (T == dynamic) return input;
if (input == null && T != Null) return null;
if (T == input.runtimeType) return input as T;
if (typeEquality<T, double>() || typeEquality<T, double?>()) {
return letDoubleOrNull(input) as T;
} else if (typeEquality<T, int>() || typeEquality<T, int?>()) {
return letInt(input) as T;
} else if (typeEquality<T, num>() || typeEquality<T, num?>()) {
return letNumOrNull(input) as T;
} else if (typeEquality<T, bool>() || typeEquality<T, bool?>()) {
return letBoolOrNull(input) as T;
} else if (typeEquality<T, DateTime>() || typeEquality<T, DateTime?>()) {
return letDateTimeOrNull(input) as T;
} else if (typeEquality<T, FirestoreTimestamp>() ||
typeEquality<T, FirestoreTimestamp?>()) {
return letFirestoreTimestampOrNull(input) as T;
} else if (typeEquality<T, Duration>() || typeEquality<T, Duration?>()) {
return letDurationOrNull(input) as T;
} else if (typeEquality<T, Uri>() || typeEquality<T, Uri?>()) {
return letUriOrNull(input) as T;
} else if (typeEquality<T, String>() || typeEquality<T, String?>()) {
return input?.toString() as T;
}
return input as T;
} catch (_) {}
return null;
}