effect method
- void callback(),
- List<
NeuronAtom> dependencies, { - bool fireImmediately = true,
Run a side effect whenever dependencies change.
The effect runs immediately and whenever any dependency changes. Effects are automatically cleaned up when the controller is disposed.
Example:
class MyController extends NeuronController {
late final count = Signal<int>(0).bind(this);
late final name = Signal<String>('').bind(this);
@override
void onInit() {
// Log whenever count or name changes
effect(() {
print('State: count=${count.val}, name=${name.val}');
}, [count, name]);
// Save to storage when count changes
effect(() {
storage.save('count', count.val);
}, [count]);
}
}
Implementation
void effect(
void Function() callback,
List<NeuronAtom> dependencies, {
bool fireImmediately = true,
}) {
if (fireImmediately) {
callback();
}
final listeners = <VoidCallback>[];
for (final dep in dependencies) {
void listener() => callback();
listeners.add(listener);
dep.addListener(listener);
}
// Store effect disposer for cleanup
_autoDispose(_EffectDisposer(dependencies, listeners));
}