select<T extends Object?, R> method
Uses the selector callback(first argument), for determining if
the widget tree of context needs to be rebuild by comparing
the previous and new result of selector, and returns it.
This evaluation only occurs if one of the selected ReactterStates gets updated,
or by the instance if the selector does not have any selected ReactterStates.
The selector callback has a two arguments, the first one is
the instance of T type which is obtained from the closest ancestor
of ReactterProvider and the second one is a Select function which
allows to wrapper any ReactterStates to listen.
final int value = context.select<MyController, int>(
(inst, $) => $(inst.stateA).value.length,
);
// more that one states can be wrapped with Select($):
final String value = context.select<MyController, String>(
(inst, $) {
final stateA = $(inst.stateA).value.trim();
final stateB = $(inst.stateB).value.trim();
return '$stateA $stateB';
},
);
// or simply don“t use Select($) and react with to any changes in the instance(low performance)
final int value = context.select<MyController, int>(
(inst, $) => inst.stateA.value.length,
);
If T is not defined and ReactterScope is not found,
will throw ReactterScopeNotFoundException.
If T is non-nullable and the instance obtained returned null,
will throw ReactterInstanceNotFoundException.
If T is nullable and no matching instance is found,
Selector first argument will return null.
This method is equivalent to calling:
ReactterSelector.contextOf<T>(context, selector, id);
Implementation
R select<T extends Object?, R>(
Selector<T, R> selector, [
String? id,
]) {
return ReactterSelector.contextOf(this, id: id, selector: selector);
}