Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -739,10 +739,9 @@ class LoggingController extends DevToolsScreenController

final queryFilter = filter.queryFilter;
if (!queryFilter.isEmpty) {
final filteredOutByQueryFilterArgument = queryFilter
.filterArguments
.values
.any((argument) => !argument.matchesValue(log));
final filteredOutByQueryFilterArgument = queryFilter.filterArguments.any(
(argument) => !argument.matchesValue(log),
);
if (filteredOutByQueryFilterArgument) return false;

if (filter.queryFilter.substringExpressions.isNotEmpty) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -449,9 +449,7 @@ class NetworkController extends DevToolsScreenController
..clear()
..addAll(
_currentNetworkRequests.value.where((NetworkRequest r) {
final filteredOutByQueryFilterArgument = queryFilter
.filterArguments
.values
final filteredOutByQueryFilterArgument = queryFilter.filterArguments
.any((argument) => !argument.matchesValue(r));
if (filteredOutByQueryFilterArgument) return false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -679,9 +679,7 @@ class CpuProfilerController extends DisposableController

final queryFilter = filter.queryFilter;
if (!queryFilter.isEmpty) {
final filteredOutByQueryFilterArgument = queryFilter
.filterArguments
.values
final filteredOutByQueryFilterArgument = queryFilter.filterArguments
.any((argument) => !argument.matchesValue(stackFrame));
if (filteredOutByQueryFilterArgument) return false;

Expand Down
26 changes: 16 additions & 10 deletions packages/devtools_app/lib/src/shared/ui/filter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:flutter/material.dart';
import '../primitives/utils.dart';
import 'common_widgets.dart';

/// A mapping from filter kinds to [QueryFilterArgument]s.
typedef QueryFilterArgs<T> = Map<String, QueryFilterArgument<T>>;
typedef SettingFilters<T> = List<SettingFilter<T, Object>>;

Expand All @@ -39,7 +40,7 @@ mixin FilterControllerMixin<T> on DisposableController
///
/// This should be overriden as a getter by subclasses to support persisting
/// the most recent filter to DevTools preferences.
ValueNotifier<String>? filterTagNotifier;
ValueNotifier<String>? get filterTagNotifier => null;

ValueListenable<Filter<T>> get activeFilter => _activeFilter;

Expand Down Expand Up @@ -94,6 +95,7 @@ mixin FilterControllerMixin<T> on DisposableController
/// query with arguments may look like 'foo category:bar type:baz'. In this
/// example, 'category' and 'type' would need to be defined as query filter
/// arguments.
@visibleForOverriding
QueryFilterArgs<T> createQueryFilterArgs() =>
<String, QueryFilterArgument<T>>{};

Expand Down Expand Up @@ -249,12 +251,11 @@ class _FilterDialogState<T> extends State<FilterDialog<T>>
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
for (final filter in widget.controller.settingFilters) ...[
for (final filter in widget.controller.settingFilters)
if (filter is ToggleFilter<T>)
_ToggleFilterElement(filter: filter)
else
_SettingFilterElement(filter: filter),
],
],
),
);
Expand Down Expand Up @@ -457,14 +458,14 @@ class SettingFilter<T, V> {
Map<String, Object?> get valueAsJson => {id: setting.value};
}

class QueryFilter {
class QueryFilter<T> {
const QueryFilter._({
this.filterArguments = const <String, QueryFilterArgument>{},
QueryFilterArgs<T> filterArguments = const {},
this.substringExpressions = const <Pattern>[],
this.isEmpty = false,
});
}) : _filterArguments = filterArguments;

factory QueryFilter.empty({required QueryFilterArgs args}) {
factory QueryFilter.empty({required QueryFilterArgs<T> args}) {
return QueryFilter._(
filterArguments: args,
substringExpressions: <Pattern>[],
Expand All @@ -474,7 +475,7 @@ class QueryFilter {

factory QueryFilter.parse(
String query, {
required QueryFilterArgs args,
required QueryFilterArgs<T> args,
required bool useRegExp,
}) {
if (query.isEmpty) {
Expand Down Expand Up @@ -534,7 +535,12 @@ class QueryFilter {
);
}

final QueryFilterArgs filterArguments;
/// The mapping of filter kinds fo [QueryFilterArgument]s.
final QueryFilterArgs<T> _filterArguments;

/// The collection of all [QueryFilterArgument]s.
Iterable<QueryFilterArgument<T>> get filterArguments =>
_filterArguments.values;

final List<Pattern> substringExpressions;

Expand All @@ -545,7 +551,7 @@ class QueryFilter {
? ''
: [
...substringExpressions.toStringList(),
for (final arg in filterArguments.values) arg.display,
for (final arg in filterArguments) arg.display,
].join(' ').trim();
}

Expand Down
4 changes: 1 addition & 3 deletions packages/devtools_app/test/shared/ui/filter_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -448,9 +448,7 @@ class _TestController extends DisposableController

final queryFilter = filter.queryFilter;
if (!queryFilter.isEmpty) {
final filteredOutByQueryFilterArgument = queryFilter
.filterArguments
.values
final filteredOutByQueryFilterArgument = queryFilter.filterArguments
.any((argument) => !argument.matchesValue(element));
if (filteredOutByQueryFilterArgument) return false;

Expand Down
Loading