@@ -5,26 +5,24 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
55
66class CallSample extends StatefulWidget {
77 static String tag = 'call_sample' ;
8-
98 final String host;
10-
11- CallSample ({Key key, @required this .host}) : super (key: key);
9+ CallSample ({required this .host});
1210
1311 @override
1412 _CallSampleState createState () => _CallSampleState ();
1513}
1614
1715class _CallSampleState extends State <CallSample > {
18- Signaling _signaling;
19- List <dynamic > _peers;
20- var _selfId;
16+ Signaling ? _signaling;
17+ List <dynamic > _peers = [] ;
18+ String ? _selfId;
2119 RTCVideoRenderer _localRenderer = RTCVideoRenderer ();
2220 RTCVideoRenderer _remoteRenderer = RTCVideoRenderer ();
2321 bool _inCalling = false ;
24- Session _session;
22+ Session ? _session;
2523
2624 // ignore: unused_element
27- _CallSampleState ({ Key key} );
25+ _CallSampleState ();
2826
2927 @override
3028 initState () {
@@ -41,85 +39,82 @@ class _CallSampleState extends State<CallSample> {
4139 @override
4240 deactivate () {
4341 super .deactivate ();
44- if ( _signaling != null ) _signaling .close ();
42+ _signaling? .close ();
4543 _localRenderer.dispose ();
4644 _remoteRenderer.dispose ();
4745 }
4846
4947 void _connect () async {
50- if (_signaling == null ) {
51- _signaling = Signaling (widget.host)..connect ();
52-
53- _signaling.onSignalingStateChange = (SignalingState state) {
54- switch (state) {
55- case SignalingState .ConnectionClosed :
56- case SignalingState .ConnectionError :
57- case SignalingState .ConnectionOpen :
58- break ;
59- }
60- };
61-
62- _signaling.onCallStateChange = (Session session, CallState state) {
63- switch (state) {
64- case CallState .CallStateNew :
65- setState (() {
66- _session = session;
67- _inCalling = true ;
68- });
69- break ;
70- case CallState .CallStateBye :
71- setState (() {
72- _localRenderer.srcObject = null ;
73- _remoteRenderer.srcObject = null ;
74- _inCalling = false ;
75- _session = null ;
76- });
77- break ;
78- case CallState .CallStateInvite :
79- case CallState .CallStateConnected :
80- case CallState .CallStateRinging :
81- }
82- };
83-
84- _signaling.onPeersUpdate = ((event) {
85- setState (() {
86- _selfId = event['self' ];
87- _peers = event['peers' ];
88- });
48+ _signaling ?? = Signaling (widget.host)..connect ();
49+ _signaling? .onSignalingStateChange = (SignalingState state) {
50+ switch (state) {
51+ case SignalingState .ConnectionClosed :
52+ case SignalingState .ConnectionError :
53+ case SignalingState .ConnectionOpen :
54+ break ;
55+ }
56+ };
57+
58+ _signaling? .onCallStateChange = (Session session, CallState state) {
59+ switch (state) {
60+ case CallState .CallStateNew :
61+ setState (() {
62+ _session = session;
63+ _inCalling = true ;
64+ });
65+ break ;
66+ case CallState .CallStateBye :
67+ setState (() {
68+ _localRenderer.srcObject = null ;
69+ _remoteRenderer.srcObject = null ;
70+ _inCalling = false ;
71+ _session = null ;
72+ });
73+ break ;
74+ case CallState .CallStateInvite :
75+ case CallState .CallStateConnected :
76+ case CallState .CallStateRinging :
77+ }
78+ };
79+
80+ _signaling? .onPeersUpdate = ((event) {
81+ setState (() {
82+ _selfId = event['self' ];
83+ _peers = event['peers' ];
8984 });
85+ });
9086
91- _signaling.onLocalStream = ((_, stream) {
92- _localRenderer.srcObject = stream;
93- });
87+ _signaling? .onLocalStream = ((stream) {
88+ _localRenderer.srcObject = stream;
89+ });
9490
95- _signaling.onAddRemoteStream = ((_, stream) {
96- _remoteRenderer.srcObject = stream;
97- });
91+ _signaling? .onAddRemoteStream = ((_, stream) {
92+ _remoteRenderer.srcObject = stream;
93+ });
9894
99- _signaling.onRemoveRemoteStream = ((_, stream) {
100- _remoteRenderer.srcObject = null ;
101- });
102- }
95+ _signaling? .onRemoveRemoteStream = ((_, stream) {
96+ _remoteRenderer.srcObject = null ;
97+ });
10398 }
10499
105100 _invitePeer (BuildContext context, String peerId, bool useScreen) async {
106101 if (_signaling != null && peerId != _selfId) {
107- _signaling.invite (peerId, 'video' , useScreen);
102+ _signaling? .invite (peerId, 'video' , useScreen);
108103 }
109104 }
110105
111106 _hangUp () {
112- if (_signaling != null ) {
113- _signaling.bye (_session.sid);
107+ if (_session != null ) {
108+ _signaling? .bye (_session! .sid);
114109 }
115110 }
116111
117112 _switchCamera () {
118- _signaling.switchCamera ();
113+ _signaling? .switchCamera ();
119114 }
120115
121116 _muteMic () {
122- _signaling.muteMic ();
117+ _signaling? .muteMic ();
123118 }
124119
125120 _buildRow (context, peer) {
@@ -136,24 +131,14 @@ class _CallSampleState extends State<CallSample> {
136131 mainAxisAlignment: MainAxisAlignment .spaceBetween,
137132 children: < Widget > [
138133 IconButton (
139- icon: Icon (self
140- ? Icons .close
141- : Icons .videocam,
142- color: self
143- ? Colors .grey
144- : Colors .black
145- ),
134+ icon: Icon (self ? Icons .close : Icons .videocam,
135+ color: self ? Colors .grey : Colors .black),
146136 onPressed: () => _invitePeer (context, peer['id' ], false ),
147137 tooltip: 'Video calling' ,
148138 ),
149139 IconButton (
150- icon: Icon (self
151- ? Icons .close
152- : Icons .screen_share,
153- color: self
154- ? Colors .grey
155- : Colors .black
156- ),
140+ icon: Icon (self ? Icons .close : Icons .screen_share,
141+ color: self ? Colors .grey : Colors .black),
157142 onPressed: () => _invitePeer (context, peer['id' ], true ),
158143 tooltip: 'Screen sharing' ,
159144 )
0 commit comments