watchOnly<R> method
R
watchOnly<R>(
- BuildContext context,
- R selector(
- TListenable1,
- AsyncSnapshot<
T2> , - TListenable3,
- AsyncSnapshot<
T4> ,
Watch all observables for changes.
Whenever any observable notifies of a change, the selector
will be
called with the latest values of all observables. If the selector
returns a different value, the context
will be rebuilt.
Returns the value provided by selector
.
It is safe to call this method multiple times within the same build method.
Implementation
R watchOnly<R>(
BuildContext context,
R Function(TListenable1, AsyncSnapshot<T2>, TListenable3, AsyncSnapshot<T4>) selector,
) {
final contextWatch = InheritedContextWatch.of(context);
final observable1 = contextWatch.getOrCreateObservable(context, $1);
if (observable1 == null) return selector($1.of(context), AsyncSnapshot<T2>.nothing(), $3.of(context), AsyncSnapshot<T4>.nothing());
final arg1 = observable1.subscription.callbackArgument as TListenable1;
final observable2 = contextWatch.getOrCreateObservable<T2>(context, $2)!;
final arg2 = observable2.subscription.callbackArgument as AsyncSnapshot<T2>;
final observable3 = contextWatch.getOrCreateObservable(context, $3)!;
final arg3 = observable3.subscription.callbackArgument as TListenable3;
final observable4 = contextWatch.getOrCreateObservable<T4>(context, $4)!;
final arg4 = observable4.subscription.callbackArgument as AsyncSnapshot<T4>;
final selectedValue = selector(arg1, arg2, arg3, arg4);
observable1.watchOnly(
(arg1) => selector(
arg1,
observable2.subscription.callbackArgument as AsyncSnapshot<T2>,
observable3.subscription.callbackArgument as TListenable3,
observable4.subscription.callbackArgument as AsyncSnapshot<T4>,
),
selectedValue,
);
observable2.watchOnly(
(arg2) => selector(
observable1.subscription.callbackArgument as TListenable1,
arg2,
observable3.subscription.callbackArgument as TListenable3,
observable4.subscription.callbackArgument as AsyncSnapshot<T4>,
),
selectedValue,
);
observable3.watchOnly(
(arg3) => selector(
observable1.subscription.callbackArgument as TListenable1,
observable2.subscription.callbackArgument as AsyncSnapshot<T2>,
arg3,
observable4.subscription.callbackArgument as AsyncSnapshot<T4>,
),
selectedValue,
);
observable4.watchOnly(
(arg4) => selector(
observable1.subscription.callbackArgument as TListenable1,
observable2.subscription.callbackArgument as AsyncSnapshot<T2>,
observable3.subscription.callbackArgument as TListenable3,
arg4,
),
selectedValue,
);
return selectedValue;
}