postEvent function

void postEvent(
  1. String eventKind,
  2. Map eventData,
  3. {@Since('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.


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/
  // `Extension` is the only stream that should not be protected here.
  final protectedStreams = <String>[

  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) {
  // TODO: When NNBD is complete, delete the following two lines.
  checkNotNullable(eventKind, 'eventKind');
  checkNotNullable(eventData, 'eventData');
  checkNotNullable(stream, 'stream');
  Map mutableEventData = Map.from(eventData); // Shallow copy.
  mutableEventData[destinationStreamKey] = stream;
  String eventDataAsString = json.encode(mutableEventData);
  _postEvent(eventKind, eventDataAsString);