notifyEffect function
Enqueues an EffectReactiveNode chain for execution.
Parameters:
e: Effect node whose dependencies changed
Example:
final effectNode = CustomEffectNode();
notifyEffect(effectNode);
if (batchDepth == 0) {
flushEffects();
}
Implementation
@override
@pragma("vm:prefer-inline")
@pragma("wasm:prefer-inline")
@pragma("dart2js:prefer-inline")
@pragma("vm:align-loops")
@pragma('vm:unsafe:no-bounds-checks')
void notifyEffect(ReactiveNode e) {
EffectBaseReactiveNode? effect = e as EffectBaseReactiveNode;
var insertIndex = queuedLength;
var firstInsertedIndex = insertIndex;
// allow do-while loop
// ignore: literal_only_boolean_expressions
do {
effect!.flags &= ~ReactiveFlags.watching;
// queued[insertIndex++] = effect;
_queueSet(insertIndex++, effect as EffectReactiveNode?);
effect = effect.subs?.sub as EffectBaseReactiveNode?;
if (effect == null || effect.flags & (ReactiveFlags.watching) == 0) {
break;
}
} while (true);
queuedLength = insertIndex;
while (firstInsertedIndex < --insertIndex) {
final left = queued[firstInsertedIndex];
// queued[firstInsertedIndex++] = queued[insertIndex];
_queueSet(firstInsertedIndex++, queued[insertIndex]);
queued[insertIndex] = left;
}
}