traverse method
Get the value of the key
from a complex obj
.
Supports multi-level traversing.
That's where the InterpolationOption.subKeyPointer
comes into place.
If keepAlive
is set to true
, it'll leave all placeholders
intact if the value is not found inside obj
.
Or else, it'll be substituted with '' (empty String)
Example:
var interpolation = Interpolation();
var obj = {
'a': 'a',
'b': 10,
'c': {
'd': 'd',
'e': 'Hello {c.d}',
'f': 'Hi "{a}", am I deep enough, or need to show "{c.e}" with {b}'
}
};
print(interpolation.traverse(obj, 'b'));
// output: 10
print(interpolation.traverse(obj, 'c.e'));
// output: Hello {c.d}
print(interpolation.traverse(obj, 'c.g')); // not present
// output: (empty string)
print(interpolation.traverse(obj, 'c.g', true)); // not present but keepAlive
// output: {c.g}
Implementation
String traverse(Map? obj, String key, [bool keepAlive = false]) {
var result = key.split(_option._subKeyPointer).fold(
obj,
(parent, k) => null == parent
? null
: parent is String
? parent
: (parent as dynamic)[k]);
return result?.toString() ?? (keepAlive ? _missingKeyKeepAlive(key) : '');
}