hasMatch method
Returns whether or not source
matches according to the contents of filter
.
Returns true
if it matches, false
if it does not.
Returns Null if comparison is not possible due to type difference, etc.
filter
の内容に応じて、source
がマッチするかどうかを返します。
マッチする場合はtrue
、しない場合はfalse
を返します。
型が違う等で比較不可能の場合はNullを返します。
Implementation
@override
bool? hasMatch(ModelQueryFilter filter, dynamic source) {
final target = filter.value;
switch (filter.type) {
case ModelQueryFilterType.equalTo:
return _hasMatch(
source,
target,
(source, target) => target.every((e) => source.contains(e)),
);
case ModelQueryFilterType.notEqualTo:
case ModelQueryFilterType.lessThan:
case ModelQueryFilterType.greaterThan:
case ModelQueryFilterType.lessThanOrEqualTo:
case ModelQueryFilterType.greaterThanOrEqualTo:
return null;
case ModelQueryFilterType.arrayContains:
return _hasMatch(
source,
target,
(source, target) => target.any((e) => source.contains(e)),
);
case ModelQueryFilterType.arrayContainsAny:
if (target is List && target.isNotEmpty) {
if (target.any((t) =>
_hasMatch(
source,
t,
(source, target) => target.any((e) => source.contains(e)),
) ??
false)) {
return true;
}
}
return null;
case ModelQueryFilterType.whereIn:
case ModelQueryFilterType.whereNotIn:
return null;
default:
return null;
}
}