search: show query filter chip during typing
This commit is contained in:
parent
f65b70b244
commit
9387496fbe
2 changed files with 16 additions and 5 deletions
|
@ -1,6 +1,8 @@
|
|||
import 'package:aves/model/filters/filters.dart';
|
||||
import 'package:aves/model/image_entry.dart';
|
||||
import 'package:aves/widgets/common/icons.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
class QueryFilter extends CollectionFilter {
|
||||
|
@ -9,9 +11,10 @@ class QueryFilter extends CollectionFilter {
|
|||
static final exactRegex = RegExp('^"(.*)"\$');
|
||||
|
||||
final String query;
|
||||
final bool colorful;
|
||||
bool Function(ImageEntry) _filter;
|
||||
|
||||
QueryFilter(this.query) {
|
||||
QueryFilter(this.query, {this.colorful = true}) {
|
||||
var upQuery = query.toUpperCase();
|
||||
|
||||
// allow NOT queries starting with `-`
|
||||
|
@ -41,6 +44,9 @@ class QueryFilter extends CollectionFilter {
|
|||
@override
|
||||
Widget iconBuilder(context, size) => Icon(AIcons.text, size: size);
|
||||
|
||||
@override
|
||||
Future<Color> color(BuildContext context) => colorful ? super.color(context) : SynchronousFuture(Colors.white);
|
||||
|
||||
@override
|
||||
String get typeKey => type;
|
||||
|
||||
|
|
|
@ -64,12 +64,13 @@ class ImageSearchDelegate extends SearchDelegate<CollectionFilter> {
|
|||
_buildFilterRow(
|
||||
context: context,
|
||||
filters: [
|
||||
_buildQueryFilter(false),
|
||||
FavouriteFilter(),
|
||||
MimeFilter(MimeTypes.ANY_IMAGE),
|
||||
MimeFilter(MimeTypes.ANY_VIDEO),
|
||||
MimeFilter(MimeFilter.animated),
|
||||
MimeFilter(MimeTypes.SVG),
|
||||
].where((f) => containQuery(f.label)),
|
||||
].where((f) => f != null && containQuery(f.label)),
|
||||
),
|
||||
StreamBuilder(
|
||||
stream: source.eventBus.on<AlbumsChangedEvent>(),
|
||||
|
@ -118,19 +119,23 @@ class ImageSearchDelegate extends SearchDelegate<CollectionFilter> {
|
|||
title: title,
|
||||
filters: filters,
|
||||
expandedNotifier: expandedSectionNotifier,
|
||||
onPressed: (filter) => close(context, filter),
|
||||
onPressed: (filter) => close(context, filter is QueryFilter ? QueryFilter(filter.query) : filter),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildResults(BuildContext context) {
|
||||
final cleanQuery = query.trim();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
// `buildResults` is called in the build phase,
|
||||
// so we post the call that will filter the collection
|
||||
// and possibly trigger a rebuild here
|
||||
close(context, cleanQuery.isNotEmpty ? QueryFilter(cleanQuery) : null);
|
||||
close(context, _buildQueryFilter(true));
|
||||
});
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
QueryFilter _buildQueryFilter(bool colorful) {
|
||||
final cleanQuery = query.trim();
|
||||
return cleanQuery.isNotEmpty ? QueryFilter(cleanQuery, colorful: colorful) : null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue