Published 2025-07-23
Parse spreadsheet data to a list of VO's.

Uses enums to check and force required spreadsheet sheets and columns.
Handles variations in sheet names and column headers by mapping different values to a single enum key.
getField.json) with getUnmatched.try {
final DataParser<SheetNames, DataHeaders, Data> parser =
DataParser<SheetNames, DataHeaders, Data>(
spreadsheet: spreadsheet,
sheet: SheetNames.spec,
sheets: mapRequiredSheetDefinitions,
headers: mapRequiredColumnDefinitions,
generator: Data.fromRow,
);
final List<Data> data = parser.parse();
expect(data.isNotEmpty, true);
} on MissingSheetsException catch (e) {
rethrow;
} on MissingHeadersException catch (e) {
rethrow;
} on DuplicateHeadersException catch (e) {
rethrow;
}
Convert a json map to a typed map.
enum SheetNames {
spec,
allocations,
}
final Map<String, dynamic> json = <String, dynamic>{
'Specs': 'spec',
'Specifications': 'spec',
'Allocations': 'allocations',
};
final Map<String, SheetNames> map =
jsonToMappedEnum<SheetNames>(json, SheetNames.values);
expect(map.length, 2);