Skip to content

Commit 3ee97bb

Browse files
authored
Merge pull request #341 from MojiMom/feature/untrackedValue
added untrackedValue
2 parents 3f307f6 + 4520ab1 commit 3ee97bb

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

packages/signals_flutter/lib/extended.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ export 'src/flutter/scheduler_binding.dart';
88
export 'src/flutter/inherited_widget/signal.dart';
99
export 'src/flutter/inherited_widget/computed.dart';
1010
export 'src/flutter/inherited_widget/readonly.dart';
11-
export 'src/flutter/inherited_widget/provider.dart';
11+
export 'src/flutter/inherited_widget/provider.dart';
12+
export 'src/extensions/untracked_value.dart';
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'package:signals_core/signals_core.dart';
2+
3+
/// Signal extensions
4+
extension ReadonlySignalUntrackedValueUtils<T> on ReadonlySignal<T> {
5+
/// Runs a callback function that returns the signal value without
6+
/// subscribing to the signal updates.
7+
///
8+
/// ```dart
9+
/// final counter = signal(0);
10+
/// final untrackedValue = counter.untrackedValue;
11+
/// ```
12+
T get untrackedValue => untracked(() => value);
13+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:signals_flutter/extended.dart';
3+
import 'package:signals_flutter/signals_flutter.dart';
4+
5+
void main() {
6+
SignalsObserver.instance = null;
7+
group('untrackedValue', () {
8+
test('single', () {
9+
final s = signal(0);
10+
int calls = 0;
11+
final dis = effect(() {
12+
s.value;
13+
s.untrackedValue + 1;
14+
calls++;
15+
});
16+
dis();
17+
18+
expect(calls, 1);
19+
});
20+
21+
test('nested', () {
22+
final s = signal(0);
23+
int calls = 0;
24+
final dis = effect(() {
25+
s.value;
26+
untracked(() => s.untrackedValue + 1);
27+
calls++;
28+
});
29+
dis();
30+
31+
expect(calls, 1);
32+
});
33+
});
34+
}

0 commit comments

Comments
 (0)