50f56c5e1e
* Respect `RTCIceTransportPolicy` enum and organize * Simplify syntax where possible etc. * Combine `VideoPreset` and `VideoPresets` * Default values for `ConnectOptions` * Build URI instead of String manipulation * Slight modifications to Exception * `LiveKitTheme` for example * `VideoEncoding` class * Organize imports * First simulcast implementation * Remove unnecessary try-catches * Update Android settings * Remember uri and token * example improvements * `fit` parameter for VideoTrackRenderer * Simulcast option for example * Pass `defaultPublishOptions` * Show only `VideoQuality` * Pass tests * Better buildUri logic * Named parameter to positional * Explicit imports * `VideoParameter` instead of `VideoPreset` * Use `mediaTrack.getSettings` when possible * Safer dispose logic * Safer `PCTransport` Update transport.dart * Synchronized events for `SignalClient` * Use logger instead of print * Make example compile for iOS * First screen share implementation * Make example work with screen share * Example improvement * Code optimization * Don't depend on web_socket_channel * Fix: Unpublish track bug * Show participant mute state & identity * Update protos * Remote mute/unmute * iOS Background mode * Separate `createCameraTrack` and `createScreenTrack` * Clean up * PB fix * format * Fix analyzer warning * Android clean up * Update README.md * Clean up
45 lines
1.2 KiB
Dart
45 lines
1.2 KiB
Dart
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class ParticipantInfoWidget extends StatelessWidget {
|
|
//
|
|
final String? title;
|
|
final bool muted;
|
|
|
|
const ParticipantInfoWidget({
|
|
this.title,
|
|
this.muted = true,
|
|
Key? key,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) => Container(
|
|
color: Colors.black.withOpacity(0.3),
|
|
padding: const EdgeInsets.symmetric(
|
|
vertical: 7,
|
|
horizontal: 10,
|
|
),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
if (title != null)
|
|
Flexible(
|
|
child: Text(
|
|
title!,
|
|
overflow: TextOverflow.ellipsis,
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.only(left: 5),
|
|
child: Icon(
|
|
!muted ? EvaIcons.mic : EvaIcons.micOff,
|
|
color: !muted ? Colors.white : Colors.red,
|
|
size: 16,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|