bindValue method
dynamic
bindValue(
- String exp
)
override
Implementation
@override
dynamic bindValue(String exp) {
if (currentMatch(exp)) {
if (exp == 'item') {
return source?[index];
} else if (exp == 'index') {
return index;
}
// Carrying ”#(“ indicates value conversion to a string
final isStringValue = exp.startsWith('#(');
dynamic processed = exp.substring(2, exp.length - 1);
if (processed.startsWith('\${')) {
processed = processed.substring(2, processed.length - 1);
}
// ^(item)
if (processed == 'item') {
return source?[index];
}
// ^(index)
else if (processed == 'index') {
return index;
}
if (processed.contains('.')) {
List<String> expList = processed.split('.');
if (expList.first == '\$item' || expList.first == 'item') {
dynamic obj = source?[index];
dynamic modelValue;
if (obj is BaseModel) {
var json = (obj).toJson();
modelValue = json;
} else if (obj is Map) {
modelValue = obj;
}
if (modelValue != null) {
expList.removeAt(0);
for (var k in expList) {
modelValue = modelValue[k];
}
// If conversion to a string is not explicitly indicated, the original type is returned
processed = isStringValue ? '$modelValue' : modelValue;
}
}
} else {
processed = processed.replaceAll('\$item', '${source?[index]}');
processed = processed.replaceAll('\$index', '$index');
}
return processed;
} else if (parentMatch(exp)) {
return parent!.bindValue(exp);
}
return exp;
}