toArray function
Converts a Postgres Array into a native Dart array
@example toArray('{"[2021-01-01,2021-12-31)","(2021-01-01,2021-12-32]"}', 'daterange')
//=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']
@example toArray([1,2,3,4], 'int4')
//=> [1,2,3,4]
Implementation
dynamic toArray(dynamic value, String type) {
if (value is! String) {
return value;
}
// trim Postgres array curly brackets
final lastIdx = value.length - 1;
final closeBrace = value[lastIdx];
final openBrace = value[0];
// Confirm value is a Postgres array by checking curly brackets
if (openBrace == '{' && closeBrace == '}') {
final valTrim = value.substring(1, lastIdx);
List arr;
// TODO: find a better solution to separate Postgres array data
try {
arr = json.decode('[$valTrim]') as List;
} catch (_) {
// WARNING: splitting on comma does not cover all edge cases
arr = valTrim != '' ? valTrim.split(',') : [];
}
return arr.map((val) => convertCell(type, val)).toList();
}
return value;
}