diff --git a/lib/pods/chat/call.dart b/lib/pods/chat/call.dart index 773c4683..87ad3488 100644 --- a/lib/pods/chat/call.dart +++ b/lib/pods/chat/call.dart @@ -362,6 +362,7 @@ class CallNotifier extends _$CallNotifier { sourceId: source.id, maxFrameRate: 30.0, captureScreenAudio: true, + useiOSBroadcastExtension: true, ), ); await _localParticipant!.publishVideoTrack(track); diff --git a/lib/widgets/chat/call_content.dart b/lib/widgets/chat/call_content.dart index 84a3ed29..9bada1f0 100644 --- a/lib/widgets/chat/call_content.dart +++ b/lib/widgets/chat/call_content.dart @@ -55,25 +55,26 @@ class CallContent extends HookConsumerWidget { ); } - // Stage view: show main speaker(s) large, others in row - final mainSpeakers = - participants - .where( - (p) => p.remoteParticipant.trackPublications.values.any( - (pub) => pub.track != null && pub.kind == TrackType.VIDEO, + // Show all participants in a responsive grid + return LayoutBuilder( + builder: (context, constraints) { + // Calculate width for responsive 2-column layout + final itemWidth = (constraints.maxWidth / 2) - 16; + + return Wrap( + alignment: WrapAlignment.center, + runAlignment: WrapAlignment.center, + spacing: 8, + runSpacing: 8, + children: [ + for (final participant in participants) + SizedBox( + width: itemWidth, + child: CallParticipantTile(live: participant), ), - ) - .toList(); - if (mainSpeakers.isEmpty && participants.isNotEmpty) { - mainSpeakers.add(participants.first); - } - return Wrap( - alignment: WrapAlignment.center, - runAlignment: WrapAlignment.center, - children: [ - for (final speaker in mainSpeakers) - Expanded(child: CallParticipantTile(live: speaker)), - ], + ], + ); + }, ); } }