joinSubscriber method Null safety

Future<Future<void> Function({String? audioRecv, String? audioSend, String? videoRecv, String? videoSend})> joinSubscriber(
  1. String roomId,
  2. {List<PublisherStream>? streams,
  3. int? privateId,
  4. int? feedId,
  5. String? pin,
  6. String? token}
)

joins the JanusVideoRoom as a media publisher on provided roomId with its name as displayName and optionally can provide your own id.

Implementation

Future<Future<void> Function({String? audioRecv, String? audioSend, String? videoRecv, String? videoSend})> joinSubscriber(
  String roomId, {
  List<PublisherStream>? streams,
  int? privateId,
  int? feedId,
  String? pin,
  String? token,
}) async {
  Future<void> start({audioRecv = true, audioSend = false, videoRecv = true, videoSend = false}) async {
    var payload = {"request": "start", 'room': roomId};
    RTCSessionDescription? offer = await this.createNullableAnswer(audioRecv: audioRecv, audioSend: audioSend, videoRecv: videoRecv, videoSend: videoSend);
    if (offer != null) await this.send(data: payload, jsep: offer);
  }

  var payload = {
    "request": "join",
    "room": roomId,
    "ptype": "subscriber",
    "pin": pin,
    "token": token,
    "feed": feedId,
    "private_id": privateId,
    "streams": streams?.map((e) => e.toMap()).toList(),
  }..removeWhere((key, value) => value == null);
  _handleRoomIdTypeDifference(payload);
  await this.send(data: payload);
  return start;
}