receiveBroadcastStream method

Stream receiveBroadcastStream([
  1. dynamic arguments
])

Implementation

Stream<dynamic> receiveBroadcastStream([dynamic arguments]) {
  final MethodChannel methodChannel = new MethodChannel(name, codec);

  final id = ++_lastId;
  final handlerName = '$name#$id';

  late StreamController<dynamic> controller;
  controller = new StreamController<dynamic>.broadcast(onListen: () async {
    ServicesBinding.instance!.defaultBinaryMessenger
        .setMessageHandler(handlerName, (ByteData? reply) async {
      if (reply == null) {
        controller.close();
      } else {
        try {
          controller.add(codec.decodeEnvelope(reply));
        } on PlatformException catch (e) {
          controller.addError(e);
        }
      }

      return reply;
    });
    try {
      await methodChannel.invokeMethod('listen#$id', arguments);
    } catch (exception, stack) {
      FlutterError.reportError(new FlutterErrorDetails(
        exception: exception,
        stack: stack,
        library: 'streams_channel2',
        context: DiagnosticsNode.message(
            'while activating platform stream on channel $name'),
      ));
    }
  }, onCancel: () async {
    ServicesBinding.instance!.defaultBinaryMessenger
        .setMessageHandler(handlerName, null);
    try {
      await methodChannel.invokeMethod('cancel#$id', arguments);
    } catch (exception, stack) {
      FlutterError.reportError(new FlutterErrorDetails(
        exception: exception,
        stack: stack,
        library: 'streams_channel2',
        context: DiagnosticsNode.message(
            'while de-activating platform stream on channel $name'),
      ));
    }
  });
  return controller.stream;
}