createSimpleSelectListener function

void createSimpleSelectListener(
  1. Target target
)

create the listener for provider.select filter (SimpleProvider)

Implementation

void createSimpleSelectListener(Target target) {
  final notifier = target.notifier;
  // get an initial value using the callback
  dynamic prevValue = target.callback(notifier);
  target.selectValue = prevValue;

  // listener with  the logic to rebuild the Consumer
  // ignore: prefer_function_declarations_over_variables
  final listener = (_) {
    final value = target.callback(notifier);
    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!(); // rebuild the Consumer
    }
    prevValue = value;
  };
  // save the listener to be added to our Notifier later
  target.listener = listener;
}