writableComputed<T> function
WritableComputed<T>
writableComputed<T>(
- BuildContext? context, {
- required T get(
- T? cached
- required void set(
- T value
- String? debugLabel,
- Object? debugOwner,
- String? debugScope,
- String? debugNote,
Factory method for creating a writable computed signal.
Example:
import 'dart:math' as math;
final count = signal<double>(null, 0);
final squared = writableComputed<double>(null,
get: (_) => count() * count(),
set: (value) => count.set(math.sqrt(value)),
);
count.set(2);
print(count()); // Print 2.0
print(squared()); // Print 4.0
squared.set(16);
print(count()); // Print 4.0
print(squared()); // Print 16.0
Implementation
WritableComputed<T> writableComputed<T>(
BuildContext? context, {
required T Function(T? cached) get,
required void Function(T value) set,
String? debugLabel,
Object? debugOwner,
String? debugScope,
String? debugNote,
}) {
if (context == null) {
final computed = _OrefWritableComputed(get, set);
final handle = devtools.bindComputed(
computed,
debugLabel: debugLabel,
debugOwner: debugOwner,
debugScope: debugScope,
debugNote: debugNote,
);
computed.attachDevTools(handle);
return computed;
}
final c = useMemoized(context, () => _OrefWritableComputed(get, set));
final handle = devtools.bindComputed(
c,
context: context,
debugLabel: debugLabel,
debugOwner: debugOwner,
debugScope: debugScope,
debugNote: debugNote,
);
c.attachDevTools(handle);
if (handle.isNew) {
registerElementDisposer(context, handle.dispose);
}
assert(() {
c.fn = get;
c.setter = set;
c.flags &= 16;
return true;
}());
return c;
}