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 {
|
class QueryFilter extends CollectionFilter {
|
||||||
static const type = 'query';
|
static const type = 'query';
|
||||||
|
|
||||||
|
static final exactRegex = RegExp('^"(.*)"\$');
|
||||||
|
|
||||||
final String query;
|
final String query;
|
||||||
bool Function(ImageEntry) _filter;
|
bool Function(ImageEntry) _filter;
|
||||||
|
|
||||||
QueryFilter(this.query) {
|
QueryFilter(this.query) {
|
||||||
var upQuery = query.toUpperCase();
|
var upQuery = query.toUpperCase();
|
||||||
|
|
||||||
|
// allow NOT queries starting with `-`
|
||||||
final not = upQuery.startsWith('-');
|
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);
|
_filter = not ? (entry) => !entry.search(upQuery) : (entry) => entry.search(upQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -290,9 +290,9 @@ class SearchField extends StatelessWidget {
|
||||||
),
|
),
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
onSubmitted: (query) {
|
onSubmitted: (query) {
|
||||||
query = query.trim();
|
final cleanQuery = query.trim();
|
||||||
if (query.isNotEmpty) {
|
if (cleanQuery.isNotEmpty) {
|
||||||
collection.addFilter(QueryFilter(query));
|
collection.addFilter(QueryFilter(cleanQuery));
|
||||||
}
|
}
|
||||||
stateNotifier.value = PageState.browse;
|
stateNotifier.value = PageState.browse;
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue