diff --git a/packages/stream_chat/lib/src/models/filter.dart b/packages/stream_chat/lib/src/models/filter.dart index 2356c57b..82ca1177 100644 --- a/packages/stream_chat/lib/src/models/filter.dart +++ b/packages/stream_chat/lib/src/models/filter.dart @@ -87,8 +87,8 @@ extension FilterOperatorX on FilterOperator { /// See Query Channels Documentation class Filter extends Equatable { const Filter.__({ - required this.operator, required this.value, + this.operator, this.key, }); @@ -159,13 +159,13 @@ class Filter extends Equatable { /// Creates a custom [Filter] if there isn't one already available. const factory Filter.custom({ - required String operator, required Object value, + String? operator, String? key, }) = Filter.__; /// An operator used for the filter. The operator string must start with `$` - final String operator; + final String? operator; /// The "left-hand" side of the filter. /// Specifies the name of the field the filter should match. @@ -188,7 +188,7 @@ class Filter extends Equatable { final groupOperators = _groupOperators.map((it) => it.rawValue); assert( - groupOperators.contains(operator) || key != null, + (operator != null && groupOperators.contains(operator)) || key != null, 'Filter must contain the `key` when the operator is not a ' 'group operator.', ); @@ -196,11 +196,13 @@ class Filter extends Equatable { if (groupOperators.contains(operator)) { // Filters with group operators are encoded in the following form: // { $: [ , ] } - json[operator] = value; - } else { + json[operator!] = value; + } else if (operator != null) { // Normal filters are encoded in the following form: // { key: { $: } } json[key!] = {operator: value}; + } else { + json[key!] = value; } return json;