Skip to content

Commit af73618

Browse files
committedAug 30, 2021
feat: null safety.
1 parent b55e90d commit af73618

File tree

9 files changed

+243
-287
lines changed

9 files changed

+243
-287
lines changed
 

‎.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@
7171
.flutter-plugins-dependencies
7272

7373
ios/Flutter/flutter_export_environment.sh
74+
lib/generated_plugin_registrant.dart

‎lib/main.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ enum DialogDemoAction {
2020
}
2121

2222
class _MyAppState extends State<MyApp> {
23-
List<RouteItem> items;
23+
List<RouteItem> items = [];
2424
String _server = '';
25-
SharedPreferences _prefs;
25+
late SharedPreferences _prefs;
2626

2727
bool _datachannel = false;
2828
@override
@@ -67,11 +67,12 @@ class _MyAppState extends State<MyApp> {
6767
});
6868
}
6969

70-
void showDemoDialog<T>({BuildContext context, Widget child}) {
70+
void showDemoDialog<T>(
71+
{required BuildContext context, required Widget child}) {
7172
showDialog<T>(
7273
context: context,
7374
builder: (BuildContext context) => child,
74-
).then<void>((T value) {
75+
).then<void>((T? value) {
7576
// The value passed to Navigator.pop() or null.
7677
if (value != null) {
7778
if (value == DialogDemoAction.connect) {

‎lib/src/call_sample/call_sample.dart

Lines changed: 62 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,24 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
55

66
class 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

1715
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;
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

Comments
 (0)
Please sign in to comment.