description

# postEvent function

void postEvent(

1. String eventKind,
2. Map eventData, {
3. @Since.new('3.0 ') String stream = 'Extension',

})

Post an event of `eventKind` with payload of `eventData` to the "Extension" event stream.

If extensionStreamHasListener is false, this method is a no-op. Override `stream` to set the destination stream that the event should be posted to. The `stream` may not start with an underscore or be a core VM Service stream.

## Implementation

    void postEvent(
      String eventKind,
      Map eventData, {
      @Since('3.0 ') String stream = 'Extension',
    }) {
      const destinationStreamKey = '__destinationStream';
      // Keep protected streams in sync with `streams_` in runtime/vm/service.cc
      // `Extension` is the only stream that should not be protected here.
      final protectedStreams = <String>[
        'VM',
        'Isolate',
        'Debug',
        'GC',
        '_Echo',
        'HeapSnapshot',
        'Logging',
        'Timer',
        'Timeline',
        'Profiler',
      ];

      if (protectedStreams.contains(stream)) {
        throw ArgumentError.value(
          stream,
          'stream',
          'Cannot be a protected stream.',
        );
      } else if (stream.startsWith('_')) {
        throw ArgumentError.value(
          stream,
          'stream',
          'Cannot start with an underscore.',
        );
      }

      if (!extensionStreamHasListener) {
        return;
      }
      Map mutableEventData = Map.from(eventData); // Shallow copy.
      mutableEventData[destinationStreamKey] = stream;
      String eventDataAsString = json.encode(mutableEventData);
      _postEvent(eventKind, eventDataAsString);
    }