findIdFieldName method
String?
findIdFieldName(
[ - O? o
])
Implementation
String? findIdFieldName([O? o]) {
var reflection = reflectionWithObject(o);
var possibleFields = reflection.fieldsWhere((f) {
return f.type.isPrimitiveType;
}).toList(growable: false);
if (possibleFields.isEmpty) {
throw StateError(
"Class without candidate for ID field: ${fieldsNames()}");
}
if (possibleFields.length == 1) {
return possibleFields.first.name;
}
possibleFields.sort((a, b) {
var n1 = a.nullable;
var n2 = b.nullable;
return n1 == n2 ? 0 : (n1 ? -1 : 1);
});
var idField = possibleFields.firstWhereOrNull((f) {
var name = f.name.toLowerCase();
return name == 'id' || name == 'key' || name == 'primary';
});
if (idField != null) {
return idField.name;
}
idField = possibleFields.firstWhereOrNull((f) => f.type.isNumericType);
idField ??=
possibleFields.firstWhereOrNull((f) => f.type.type.isDynamicNumberType);
if (idField != null) {
return idField.name;
}
idField = possibleFields.firstWhereOrNull((f) => f.nullable);
if (idField != null) {
return idField.name;
}
return null;
}