getPath<E> method
Returns the final value from a path of keys as E
.
If not null, it attempts to parse the value into E
or throws a StateError.
Implementation
E? getPath<E>(String k0, [Object? k1, Object? k2, Object? k3, Object? k4]) {
Object key = k0;
Object? val = get(k0);
if (val == null) return null;
if (k1 != null) {
key = k1;
val = val is Map ? val[k1] : (k1 is int && val is List ? val[k1] : null);
if (val == null) return null;
}
if (k2 != null) {
key = k2;
val = val is Map ? val[k2] : (k2 is int && val is List ? val[k2] : null);
if (val == null) return null;
}
if (k3 != null) {
key = k3;
val = val is Map ? val[k3] : (k3 is int && val is List ? val[k3] : null);
if (val == null) return null;
}
if (k4 != null) {
key = k4;
val = val is Map ? val[k4] : (k4 is int && val is List ? val[k4] : null);
if (val == null) return null;
}
val = _resolveValue(key.toString(), val, null);
if (val is! E) {
var val2 = _parseValue<E>(val);
if (val2 != null) return val2;
var keyPath = [k0, k1, k2, k3, k4].whereNotNull().join('/');
throw StateError("Can't return key `$keyPath` as `$E`: $val");
}
return val;
}