@@ -17,17 +17,13 @@ class CallSample extends StatefulWidget {
17
17
}
18
18
19
19
class _CallSampleState extends State <CallSample > {
20
- GlobalKey <FormState > _formKey = new GlobalKey <FormState >();
21
20
Signaling _signaling;
22
- String _roomId;
23
21
String _displayName = Platform .operatingSystem + "_flutter" ;
24
22
List <dynamic > _peers;
25
-
23
+ var _self_id;
26
24
final _localRenderer = new RTCVideoRenderer ();
27
25
final _remoteRenderer = new RTCVideoRenderer ();
28
26
bool _inCalling = false ;
29
- Timer _timer;
30
-
31
27
final String serverIP;
32
28
33
29
_CallSampleState ({Key key, @required this .serverIP});
@@ -52,60 +48,65 @@ class _CallSampleState extends State<CallSample> {
52
48
53
49
void _connect () async {
54
50
if (_signaling == null ) {
55
- _signaling = new Signaling ('ws://' + serverIP + ':4442' , _displayName);
56
- await _signaling.connect ();
57
-
58
- _signaling.onPeers.listen ((message) {
59
- Map <String , dynamic > mapData = message;
60
- List <dynamic > peers = mapData['data' ];
61
- this .setState (() {
62
- _peers = peers;
51
+ _signaling = new Signaling ('ws://' + serverIP + ':4442' , _displayName)
52
+ ..connect ();
53
+
54
+ _signaling.onStateChange = (SignalingState state) {
55
+ switch (state){
56
+ case SignalingState .CallStateNew :
57
+ this .setState ((){ _inCalling = true ; });
58
+ break ;
59
+ case SignalingState .CallStateBye :
60
+ this .setState ((){ _inCalling = false ; });
61
+ break ;
62
+ }
63
+ };
64
+
65
+ _signaling.onPeersUpdate = ((event){
66
+ this .setState ((){
67
+ _self_id = event['self' ];
68
+ _peers = event['peers' ];
63
69
});
64
70
});
65
71
66
- _signaling.onLocalStream.listen ((message) {
67
- Map <String , dynamic > mapData = message;
68
- _localRenderer.srcObject = mapData['stream' ];
72
+ _signaling.onLocalStream = ((stream) {
73
+ this .setState (() {
74
+ _localRenderer.srcObject = stream;
75
+ });
69
76
});
70
77
71
- _signaling.onRemoteStreamAdd.listen ((message) {
72
- Map <String , dynamic > mapData = message;
73
- _remoteRenderer.srcObject = mapData['stream' ];
78
+ _signaling.onAddRemoteStream = ((stream) {
79
+ _remoteRenderer.srcObject = stream;
74
80
});
75
81
76
- _signaling.onRemoteStreamRemoved. listen ((message ) {
82
+ _signaling.onRemoveRemoteStream = ((stream ) {
77
83
this .setState (() {
78
- _inCalling = false ;
79
84
_remoteRenderer.srcObject = null ;
80
85
});
81
86
});
82
87
}
83
88
}
84
89
85
90
_invitePeer (context, peerId) {
86
- this .setState (() {
87
- _inCalling = true ;
88
- });
89
91
if (_signaling != null ) {
90
92
_signaling.invite (peerId, 'video' );
91
93
}
92
94
}
93
95
94
96
_hangUp () {
95
- this .setState (() {
96
- _inCalling = false ;
97
- });
98
97
if (_signaling != null ) {
99
98
_signaling.bye ();
100
99
}
101
100
}
102
101
103
102
_buildRow (context, peer) {
103
+ if (peer['id' ] == _self_id)
104
+ return null ;
104
105
return ListBody (children: < Widget > [
105
106
ListTile (
106
107
title: Text (peer['name' ]),
107
108
onTap: () => _invitePeer (context, peer['id' ]),
108
- trailing: Icon (Icons .video_call ),
109
+ trailing: Icon (Icons .videocam ),
109
110
),
110
111
Divider ()
111
112
]);
@@ -124,11 +125,11 @@ class _CallSampleState extends State<CallSample> {
124
125
),
125
126
],
126
127
),
127
- floatingActionButton: FloatingActionButton (
128
+ floatingActionButton: _inCalling ? FloatingActionButton (
128
129
onPressed: _hangUp,
129
130
tooltip: 'Hangup' ,
130
- child: new Icon (_inCalling ? Icons .call_end : Icons .phone ),
131
- ),
131
+ child: new Icon (Icons .call_end),
132
+ ) : null ,
132
133
body: _inCalling
133
134
? new OrientationBuilder (
134
135
builder: (context, orientation) {
0 commit comments