filters: handle queries wrapped with "..."
This commit is contained in:
parent
acc2cd6c9e
commit
28d2dff8b5
2 changed files with 17 additions and 4 deletions
|
@ -6,13 +6,26 @@ import 'package:outline_material_icons/outline_material_icons.dart';
|
|||
class QueryFilter extends CollectionFilter {
|
||||
static const type = 'query';
|
||||
|
||||
static final exactRegex = RegExp('^"(.*)"\$');
|
||||
|
||||
final String query;
|
||||
bool Function(ImageEntry) _filter;
|
||||
|
||||
QueryFilter(this.query) {
|
||||
var upQuery = query.toUpperCase();
|
||||
|
||||
// allow NOT queries starting with `-`
|
||||
final not = upQuery.startsWith('-');
|
||||
if (not) upQuery = upQuery.substring(1);
|
||||
if (not) {
|
||||
upQuery = upQuery.substring(1);
|
||||
}
|
||||
|
||||
// allow untrimmed queries wrapped with `"..."`
|
||||
final matches = exactRegex.allMatches(upQuery);
|
||||
if (matches.length == 1) {
|
||||
upQuery = matches.elementAt(0).group(1);
|
||||
}
|
||||
|
||||
_filter = not ? (entry) => !entry.search(upQuery) : (entry) => entry.search(upQuery);
|
||||
}
|
||||
|
||||
|
|
|
@ -290,9 +290,9 @@ class SearchField extends StatelessWidget {
|
|||
),
|
||||
autofocus: true,
|
||||
onSubmitted: (query) {
|
||||
query = query.trim();
|
||||
if (query.isNotEmpty) {
|
||||
collection.addFilter(QueryFilter(query));
|
||||
final cleanQuery = query.trim();
|
||||
if (cleanQuery.isNotEmpty) {
|
||||
collection.addFilter(QueryFilter(cleanQuery));
|
||||
}
|
||||
stateNotifier.value = PageState.browse;
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue