@@ -27,7 +27,30 @@ enum ConditionOperation {
2727
2828 /// Checks if the value of the variable is less than or equal to the
2929 /// value provided.
30- lessThanOrEqualTo;
30+ lessThanOrEqualTo,
31+
32+ /// Checks if the value of the variable is empty. This is applicable only
33+ /// for strings and collections.
34+ isEmpty,
35+
36+ /// Checks if the value of the variable is not empty. This is applicable only
37+ /// for strings and collections.
38+ isNotEmpty,
39+
40+ /// Checks if the value of the variable contains a given item. This is
41+ /// applicable only for collections.
42+ contains,
43+
44+ /// Checks if the value of the variable is odd. This is applicable only
45+ /// for integers.
46+ isOdd,
47+
48+ /// Checks if the value of the variable is even. This is applicable only
49+ /// for integers.
50+ isEven,
51+
52+ /// Checks if the value of the variable is null.
53+ isNull;
3154
3255 /// label for the operation
3356 String get label => switch (this ) {
@@ -37,6 +60,12 @@ enum ConditionOperation {
3760 lessThan => 'Less Than' ,
3861 greaterThanOrEqualTo => 'Greater Than Or Equal To' ,
3962 lessThanOrEqualTo => 'Less Than Or Equal To' ,
63+ isEmpty => 'Is Empty' ,
64+ isNotEmpty => 'Is Not Empty' ,
65+ contains => 'Contains' ,
66+ isOdd => 'Is Odd' ,
67+ isEven => 'Is Even' ,
68+ isNull => 'Is Null' ,
4069 };
4170
4271 /// short description of the operation
@@ -47,16 +76,28 @@ enum ConditionOperation {
4776 lessThan => 'less than' ,
4877 greaterThanOrEqualTo => 'greater than or equal to' ,
4978 lessThanOrEqualTo => 'less than or equal to' ,
79+ isEmpty => 'is empty' ,
80+ isNotEmpty => 'is not empty' ,
81+ contains => 'contains' ,
82+ isOdd => 'is odd' ,
83+ isEven => 'is even' ,
84+ isNull => 'is null' ,
5085 };
5186
5287 /// short description of the operation
53- String get sign => switch (this ) {
88+ String ? get sign => switch (this ) {
5489 equalsTo => '==' ,
5590 notEqualsTo => '!=' ,
5691 greaterThan => '>' ,
5792 lessThan => '<' ,
5893 greaterThanOrEqualTo => '>=' ,
5994 lessThanOrEqualTo => '<=' ,
95+ isEmpty => null ,
96+ isNotEmpty => null ,
97+ contains => null ,
98+ isOdd => null ,
99+ isEven => null ,
100+ isNull => null ,
60101 };
61102
62103 /// Allows the provided [visitor] to visit this operation.
@@ -70,6 +111,28 @@ enum ConditionOperation {
70111 visitor.visitGreaterThanOrEqualToOperator (left, right),
71112 lessThanOrEqualTo =>
72113 visitor.visitLessThanOrEqualToOperator (left, right),
114+ isEmpty => visitor.visitIsEmptyOperator (left),
115+ isNotEmpty => visitor.visitIsNotEmptyOperator (left),
116+ contains => visitor.visitContainsOperator (left, right),
117+ isOdd => visitor.visitIsOddOperator (left),
118+ isEven => visitor.visitIsEvenOperator (left),
119+ isNull => visitor.visitIsNullOperator (left),
120+ };
121+
122+ /// Returns true if the operation requires a right operand.
123+ bool get requiresRightOperand => switch (this ) {
124+ equalsTo => true ,
125+ notEqualsTo => true ,
126+ greaterThan => true ,
127+ lessThan => true ,
128+ greaterThanOrEqualTo => true ,
129+ lessThanOrEqualTo => true ,
130+ isEmpty => false ,
131+ isNotEmpty => false ,
132+ contains => true ,
133+ isOdd => false ,
134+ isEven => false ,
135+ isNull => false ,
73136 };
74137}
75138
@@ -586,23 +649,41 @@ class CanvasConditions with EquatableMixin {
586649
587650/// A visitor that can be used to visit a [ConditionOperation] .
588651abstract interface class ConditionOperatorVisitor {
589- /// Visits a [ConditionOperation.equalsTo] .
652+ /// Visits a [ConditionOperation.equalsTo] operator .
590653 bool visitEqualsOperator (Object ? left, Object ? right);
591654
592- /// Visits a [ConditionOperation.notEqualsTo] .
655+ /// Visits a [ConditionOperation.notEqualsTo] operator .
593656 bool visitNotEqualsOperator (Object ? left, Object ? right);
594657
595- /// Visits a [ConditionOperation.greaterThan] .
658+ /// Visits a [ConditionOperation.greaterThan] operator .
596659 bool visitGreaterThanOperator (Object ? left, Object ? right);
597660
598- /// Visits a [ConditionOperation.lessThan] .
661+ /// Visits a [ConditionOperation.lessThan] operator .
599662 bool visitLessThanOperator (Object ? left, Object ? right);
600663
601- /// Visits a [ConditionOperation.greaterThanOrEqualTo] .
664+ /// Visits a [ConditionOperation.greaterThanOrEqualTo] operator .
602665 bool visitGreaterThanOrEqualToOperator (Object ? left, Object ? right);
603666
604- /// Visits a [ConditionOperation.lessThanOrEqualTo] .
667+ /// Visits a [ConditionOperation.lessThanOrEqualTo] operator .
605668 bool visitLessThanOrEqualToOperator (Object ? left, Object ? right);
669+
670+ /// Visits a [ConditionOperation.isEmpty] operator.
671+ bool visitIsEmptyOperator (Object ? value);
672+
673+ /// Visits a [ConditionOperation.isNotEmpty] operator.
674+ bool visitIsNotEmptyOperator (Object ? value);
675+
676+ /// Visits a [ConditionOperation.isNotEmpty] operator.
677+ bool visitContainsOperator (Object ? left, Object ? right);
678+
679+ /// Visits a [ConditionOperation.isNotEmpty] operator.
680+ bool visitIsOddOperator (Object ? value);
681+
682+ /// Visits a [ConditionOperation.isNotEmpty] operator.
683+ bool visitIsEvenOperator (Object ? value);
684+
685+ /// Visits a [ConditionOperation.isNull] operator.
686+ bool visitIsNullOperator (Object ? value);
606687}
607688
608689/// An interface for evaluating conditions.
0 commit comments