Skip to content
This repository was archived by the owner on Apr 15, 2025. It is now read-only.

Commit bd0d4ff

Browse files
vicbmhevery
authored andcommitted
fix(scope): allow watching an empty string
1 parent 8944f0d commit bd0d4ff

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

lib/core/scope.dart

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,17 +205,21 @@ class Scope {
205205
assert(expression is String);
206206
Watch watch;
207207
ReactionFn fn = reactionFn;
208-
if (expression.startsWith('::')) {
209-
expression = expression.substring(2);
210-
fn = (value, last) {
211-
if (value != null) {
212-
watch.remove();
213-
return reactionFn(value, last);
214-
}
215-
};
216-
} else if (expression.startsWith(':')) {
217-
expression = expression.substring(1);
218-
fn = (value, last) => value == null ? null : reactionFn(value, last);
208+
if (expression.isEmpty) {
209+
expression = '""';
210+
} else {
211+
if (expression.startsWith('::')) {
212+
expression = expression.substring(2);
213+
fn = (value, last) {
214+
if (value != null) {
215+
watch.remove();
216+
return reactionFn(value, last);
217+
}
218+
};
219+
} else if (expression.startsWith(':')) {
220+
expression = expression.substring(1);
221+
fn = (value, last) => value == null ? null : reactionFn(value, last);
222+
}
219223
}
220224

221225
AST ast = rootScope._astParser(expression, context: context,

test/core/scope_spec.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,14 @@ void main() {
6666
it('should watch literals', (Logger logger, Map context, RootScope rootScope) {
6767
context['a'] = 1;
6868
rootScope
69+
..watch('', (value, previous) => logger(value))
70+
..watch('""', (value, previous) => logger(value))
6971
..watch('1', (value, previous) => logger(value))
7072
..watch('"str"', (value, previous) => logger(value))
7173
..watch('[a, 2, 3]', (value, previous) => logger(value))
7274
..watch('{a:a, b:2}', (value, previous) => logger(value))
7375
..digest();
74-
expect(logger).toEqual([1, 'str', [1, 2, 3], {'a': 1, 'b': 2}]);
76+
expect(logger).toEqual(['', '', 1, 'str', [1, 2, 3], {'a': 1, 'b': 2}]);
7577
logger.clear();
7678
context['a'] = 3;
7779
rootScope.digest();

0 commit comments

Comments
 (0)