drain method

void drain()

Implementation

void drain() {
  if (drainDisabled) return;
  drainDisabled = true;

  final List<dynamic> objects = this.objects;
  final List<TrackEntryCallback> onStartCallbacks =
      animState.onStartCallbacks;
  final List<TrackEntryCallback> onInterruptCallbacks =
      animState.onInterruptCallbacks;
  final List<TrackEntryCallback> onEndCallbacks = animState.onEndCallbacks;
  final List<TrackEntryCallback> onDisposeCallbacks =
      animState.onDisposeCallbacks;
  final List<TrackEntryCallback> onCompleteCallbacks =
      animState.onCompleteCallbacks;
  final List<TrackEntryEventCallback> onEventCallbacks =
      animState.onEventCallbacks;

  for (int i = 0; i < objects.length; i += 2) {
    final EventType? type = objects[i] as EventType?;
    final TrackEntry? entry = objects[i + 1] as TrackEntry?;
    switch (type) {
      case null:
      case EventType.start:
        if (entry!.onStartCallback != null) entry.onStartCallback!(entry);
        for (TrackEntryCallback callback in onStartCallbacks) {
          callback(entry);
        }
        break;
      case EventType.interrupt:
        if (entry!.onInterruptCallback != null) {
          entry.onInterruptCallback!(entry);
        }
        for (TrackEntryCallback callback in onInterruptCallbacks) {
          callback(entry);
        }
        break;
      case EventType.end:
      case EventType.dispose:
        if (type == EventType.end) {
          if (entry!.onEndCallback != null) entry.onEndCallback!(entry);
          for (TrackEntryCallback callback in onEndCallbacks) {
            callback(entry);
          }
        }
        if (entry!.onDisposeCallback != null) entry.onDisposeCallback!(entry);
        for (TrackEntryCallback callback in onDisposeCallbacks) {
          callback(entry);
        }
        animState.trackEntryPool.free(entry);
        break;
      case EventType.complete:
        if (entry!.onCompleteCallback != null) {
          entry.onCompleteCallback!(entry);
        }
        for (TrackEntryCallback callback in onCompleteCallbacks) {
          callback(entry);
        }
        break;
      case EventType.event:
        final Event? event = objects[i++ + 2] as Event?;

        if (entry!.onEventCallback != null) {
          entry.onEventCallback!(entry, event);
        }
        for (TrackEntryEventCallback callback in onEventCallbacks) {
          callback(entry, event);
        }
        break;
    }
  }
  clear();

  drainDisabled = false;
}