DbRow.fromMap constructor
Create from a map of strings
Implementation
factory DbRow.fromMap(DbTable? table, Map<String, dynamic> row) {
final recs = <DbRecord>[];
row.forEach((key, dynamic value) {
if (key == "id") {
recs.add(DbRecord<int?>(key, value as int?));
} else {
final col = table!.column(key);
if (col == null) {
recs.add(DbRecord<dynamic>(key, value));
} else {
//print("COL ${col.name} ${col.type}");
switch (col.type) {
case DbColumnType.varchar:
recs.add(DbRecord<String>(key, value.toString()));
break;
case DbColumnType.text:
recs.add(DbRecord<String>(key, value.toString()));
break;
case DbColumnType.integer:
int? v;
try {
v = value as int?;
} catch (e) {
rethrow;
}
recs.add(DbRecord<int?>(key, v));
break;
case DbColumnType.real:
double? v;
try {
v = value as double?;
} catch (e) {
rethrow;
}
recs.add(DbRecord<double?>(key, v));
break;
case DbColumnType.boolean:
bool v;
if (value == "false") {
v = false;
} else if (value == "true") {
v = true;
} else {
throw Exception("Wrong value $value for boolean field $key");
}
recs.add(DbRecord<bool>(key, v));
break;
case DbColumnType.timestamp:
int? v;
try {
v = value as int?;
} catch (e) {
rethrow;
}
recs.add(DbRecord<int?>(key, v));
break;
case DbColumnType.blob:
Uint8List? v;
try {
v = value as Uint8List?;
} catch (e) {
rethrow;
}
recs.add(DbRecord<Uint8List?>(key, v));
break;
}
}
}
});
//print("ROW $recs");
return DbRow(recs);
}