createSelectListener<N extends StateNotifier<S> , S, R> function
void
createSelectListener<N extends StateNotifier<S> , S, R>(
- SelectFilteredProvider<
N, S, R> filter
create the listener for provider.select filter (StateProvider)
Implementation
void createSelectListener<N extends StateNotifier<S>, S, R>(
SelectFilteredProvider<N, S, R> filter,
) {
R prevValue = filter.callback(filter.notifier.state);
filter.selectValue = prevValue;
filter.listener = (newState) {
final value = filter.callback(filter.notifier.state);
if (filter.listenWhenTheCallbackReturnsTrue) {
assert(
value is bool,
'The value returned by the callback must be a boolean because '
'listenWhenTheCallbackReturnsTrue is true',
);
}
filter.selectValue = value;
bool allowRebuild = false;
if (value is bool && filter.listenWhenTheCallbackReturnsTrue) {
allowRebuild = value;
} else if (prevValue != value) {
allowRebuild = true;
}
// check if the value has changed
if (allowRebuild && filter.reaction != null) {
filter.reaction!(filter.notifier);
}
prevValue = value;
};
}