@@ -5,26 +5,24 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
5
5
6
6
class CallSample extends StatefulWidget {
7
7
static String tag = 'call_sample' ;
8
-
9
8
final String host;
10
-
11
- CallSample ({Key key, @required this .host}) : super (key: key);
9
+ CallSample ({required this .host});
12
10
13
11
@override
14
12
_CallSampleState createState () => _CallSampleState ();
15
13
}
16
14
17
15
class _CallSampleState extends State <CallSample > {
18
- Signaling _signaling;
19
- List <dynamic > _peers;
20
- var _selfId;
16
+ Signaling ? _signaling;
17
+ List <dynamic > _peers = [] ;
18
+ String ? _selfId;
21
19
RTCVideoRenderer _localRenderer = RTCVideoRenderer ();
22
20
RTCVideoRenderer _remoteRenderer = RTCVideoRenderer ();
23
21
bool _inCalling = false ;
24
- Session _session;
22
+ Session ? _session;
25
23
26
24
// ignore: unused_element
27
- _CallSampleState ({ Key key} );
25
+ _CallSampleState ();
28
26
29
27
@override
30
28
initState () {
@@ -41,85 +39,82 @@ class _CallSampleState extends State<CallSample> {
41
39
@override
42
40
deactivate () {
43
41
super .deactivate ();
44
- if ( _signaling != null ) _signaling .close ();
42
+ _signaling? .close ();
45
43
_localRenderer.dispose ();
46
44
_remoteRenderer.dispose ();
47
45
}
48
46
49
47
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' ];
89
84
});
85
+ });
90
86
91
- _signaling.onLocalStream = ((_, stream) {
92
- _localRenderer.srcObject = stream;
93
- });
87
+ _signaling? .onLocalStream = ((stream) {
88
+ _localRenderer.srcObject = stream;
89
+ });
94
90
95
- _signaling.onAddRemoteStream = ((_, stream) {
96
- _remoteRenderer.srcObject = stream;
97
- });
91
+ _signaling? .onAddRemoteStream = ((_, stream) {
92
+ _remoteRenderer.srcObject = stream;
93
+ });
98
94
99
- _signaling.onRemoveRemoteStream = ((_, stream) {
100
- _remoteRenderer.srcObject = null ;
101
- });
102
- }
95
+ _signaling? .onRemoveRemoteStream = ((_, stream) {
96
+ _remoteRenderer.srcObject = null ;
97
+ });
103
98
}
104
99
105
100
_invitePeer (BuildContext context, String peerId, bool useScreen) async {
106
101
if (_signaling != null && peerId != _selfId) {
107
- _signaling.invite (peerId, 'video' , useScreen);
102
+ _signaling? .invite (peerId, 'video' , useScreen);
108
103
}
109
104
}
110
105
111
106
_hangUp () {
112
- if (_signaling != null ) {
113
- _signaling.bye (_session.sid);
107
+ if (_session != null ) {
108
+ _signaling? .bye (_session! .sid);
114
109
}
115
110
}
116
111
117
112
_switchCamera () {
118
- _signaling.switchCamera ();
113
+ _signaling? .switchCamera ();
119
114
}
120
115
121
116
_muteMic () {
122
- _signaling.muteMic ();
117
+ _signaling? .muteMic ();
123
118
}
124
119
125
120
_buildRow (context, peer) {
@@ -136,24 +131,14 @@ class _CallSampleState extends State<CallSample> {
136
131
mainAxisAlignment: MainAxisAlignment .spaceBetween,
137
132
children: < Widget > [
138
133
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),
146
136
onPressed: () => _invitePeer (context, peer['id' ], false ),
147
137
tooltip: 'Video calling' ,
148
138
),
149
139
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),
157
142
onPressed: () => _invitePeer (context, peer['id' ], true ),
158
143
tooltip: 'Screen sharing' ,
159
144
)
0 commit comments