passes method
Validates the value using the given context.
Returns true if valid, otherwise false.
Implementation
@override
FutureOr<bool> passes(ValidationContext context) async {
final value = context.value;
final args = context.parameters;
final field = context.attribute;
if (value == null || value.toString().trim().isEmpty) {
return true;
}
var tableName = _table;
var columnName = _column;
final extraClauses = <Map<String, dynamic>>[];
if (args.isNotEmpty) {
tableName = args[0];
if (args.length > 1 && args[1].toUpperCase() != 'NULL') {
columnName = args[1];
}
// Extra where clauses: key,value pairs starting from index 2
for (int i = 2; i < args.length; i += 2) {
if (i + 1 < args.length) {
extraClauses.add({
'column': args[i],
'value': args[i + 1],
});
}
}
}
if (tableName == null) {
throw Exception("ExistsRule requires a table name.");
}
final db = DB.table(tableName);
final dbColumn = columnName ?? field;
db.where(dbColumn, '=', value);
// Apply extra clauses
for (final clause in extraClauses) {
final col = clause['column'];
final val = clause['value'];
if (val == 'NULL') {
db.whereNull(col);
} else if (val == 'NOT_NULL') {
db.whereNotNull(col);
} else {
db.where(col, '=', val);
}
}
// If record exists -> pass.
return await db.exists();
}