import 'package:diplomaticquarterapp/pages/webRTC/signaling.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart'; class CallPage extends StatefulWidget { @override _CallPageState createState() => _CallPageState(); } class _CallPageState extends State { Signaling signaling = Signaling(); RTCVideoRenderer _localRenderer = RTCVideoRenderer(); RTCVideoRenderer _remoteRenderer = RTCVideoRenderer(); String roomId; TextEditingController textEditingController = TextEditingController(text: ''); @override void initState() { _localRenderer.initialize(); _remoteRenderer.initialize(); signaling.onAddRemoteStream = ((stream) { _remoteRenderer.srcObject = stream; setState(() {}); }); super.initState(); } @override void dispose() { _localRenderer.dispose(); _remoteRenderer.dispose(); super.dispose(); } void _getUserMedia() async { final Map constraints = { 'audio': 'false', 'video': {'facingMode': 'user'}, }; MediaStream stream = await navigator.mediaDevices.getUserMedia(constraints); setState(() { _localRenderer.srcObject = stream; }); } void initializeRenderers() async { _localRenderer.initialize(); } @override Widget build(BuildContext context) { return AppScaffold( isShowAppBar: true, showNewAppBar: true, showNewAppBarTitle: true, isShowDecPage: false, appBarTitle: "WebRTC Calling", body: Column( children: [ SizedBox(height: 8), Wrap( children: [ ElevatedButton( onPressed: () { setState(() { signaling.openUserMedia(_localRenderer, _remoteRenderer); }); }, child: Text("Open camera & microphone"), ), SizedBox( width: 8, ), ElevatedButton( onPressed: () async { roomId = await signaling.createRoom(_remoteRenderer); textEditingController.text = roomId; setState(() {}); }, child: Text("Create room"), ), SizedBox( width: 8, ), ElevatedButton( onPressed: () { // Add roomId signaling.joinRoom( textEditingController.text, _remoteRenderer, ); }, child: Text("Join room"), ), SizedBox( width: 8, ), ElevatedButton( onPressed: () { signaling.hangUp(_localRenderer); }, child: Text("Hangup"), ) ], ), SizedBox(height: 8), Expanded( child: Padding( padding: const EdgeInsets.all(0.0), child: Stack( children: [ Positioned(top: 0.0, right: 0.0, left: 0.0, bottom: 0.0, child: RTCVideoView(_remoteRenderer)), Positioned( top: 20.0, right: 100.0, left: 20.0, bottom: 300.0, child: RTCVideoView(_localRenderer, mirror: true), ), ], ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text("Join the following Room: "), Flexible( child: TextFormField( controller: textEditingController, ), ) ], ), ), SizedBox(height: 8) ], ), ); } }