createSubscription method

void createSubscription()

Implementation

void createSubscription() {
  var isNew = widget.onLoad == null;
  if (subscription != null) {
    subscription!.cancel();
    subscription = null;
  }

  subscription = widget.model.changes.listen((newEvent) {
    if (newEvent == event && !isNew) return;
    isNew = false;
    oldEvent = event;

    final shouldBuild =
        !((widget.buildWhen == null && newEvent is FormChangedEvent) ||
            (widget.buildWhen == null && newEvent is FieldChangedEvent) ||
            (widget.buildWhen != null &&
                !widget.buildWhen!(widget.model, oldEvent, newEvent)));

    if (shouldBuild) {
      if (oldEvent is ViewChangedEvent && newEvent is ViewChangedEvent) {
        if ((oldEvent as ViewChangedEvent).status == ViewStatus.loading &&
            newEvent.status != ViewStatus.loading &&
            newEvent.status != ViewStatus.error) {
          subscription!.cancel();
          createSubscription();
        }
      }

      setState(() {
        oldEvent = event;
        event = newEvent;
      });
    }

    if (widget.listener != null) widget.listener!(oldEvent, newEvent);
  });
}