createStateSelectListener function

void createStateSelectListener(
  1. Target target
)

create the listener for provider.select filter (StateProvider)

Implementation

void createStateSelectListener(Target target) {
  dynamic prevValue = target.callback(target.notifier.state);
  target.selectValue = prevValue;

  // ignore: prefer_function_declarations_over_variables
  final listener = (newState) {
    final value = target.callback(target.notifier.state);
    if (target.listenWhenTheCallbackReturnsTrue) {
      assert(
        value is bool,
        'The value returned by the callback must be a boolean because '
        'listenWhenTheCallbackReturnsTrue is true',
      );
    }

    target.selectValue = value;

    bool allowRebuild = false;
    if (value is bool && target.listenWhenTheCallbackReturnsTrue) {
      allowRebuild = value;
    } else if (prevValue != value) {
      allowRebuild = true;
    }

    // check if the value has changed
    if (allowRebuild && target.rebuild != null) {
      target.rebuild!();
    }
    prevValue = value;
  };
  target.listener = listener;
}