@@ -49,6 +49,8 @@ class RoomState extends State<Room> {
4949 if (value['status' ]) {
5050 _room = value['body' ]['room' ];
5151 initRoom (value['body' ]['videoTrackInfos' ], value['body' ]['users' ]);
52+ } else {
53+ clearDataEndDismiss ();
5254 }
5355 });
5456 }
@@ -217,12 +219,7 @@ class RoomState extends State<Room> {
217219 _room.publish (value['body' ]).then ((value) {
218220 if (value['status' ]) {
219221 setState (() {
220- // _hasLocalView = true;
221222 _localTrack = value['body' ];
222- // _localTrackView = _localTrack.attach(
223- // alignment: Alignment.center,
224- // scalingType: ScalingType.fit,
225- // );
226223 });
227224 }
228225 });
@@ -269,18 +266,15 @@ class RoomState extends State<Room> {
269266 }
270267
271268 void handleRemoveVideoTrackEvent (StringeeVideoTrackInfo trackInfo) {
272- _room.unsubscribe (trackInfo).then ((value) {
273- if (value['status' ]) {
274- setState (() {
275- if (_remoteTracks.length > 0 ) {
276- for (int i = 0 ; i < _remoteTracks.length; i++ ) {
277- StringeeVideoTrack track = _remoteTracks[i];
278- if (track.id == trackInfo.id) {
279- _remoteTracks.removeAt (i);
280- }
281- }
269+ setState (() {
270+ if (_remoteTracks.length > 0 ) {
271+ for (int i = 0 ; i < _remoteTracks.length; i++ ) {
272+ StringeeVideoTrack track = _remoteTracks[i];
273+ if (track.id == trackInfo.id) {
274+ _remoteTracks.removeAt (i);
275+ _remoteTrackViews.removeAt (i);
282276 }
283- });
277+ }
284278 }
285279 });
286280 }
@@ -290,13 +284,26 @@ class RoomState extends State<Room> {
290284 void handleTrackReadyToPlayEvent (StringeeVideoTrack track) {
291285 print ("handleTrackReadyToPlayEvent" );
292286 if (track.isLocal) {
293- setState (() {
294- _hasLocalView = true ;
295- _localTrackView = track.attach (
296- alignment: Alignment .center,
287+ if (track.isScreenCapture) {
288+ StringeeVideoView videoView = track.attach (
289+ isOverlay: true ,
290+ height: 200.0 ,
291+ width: 150.0 ,
297292 scalingType: ScalingType .fit,
298293 );
299- });
294+
295+ setState (() {
296+ _remoteTrackViews.add (videoView);
297+ });
298+ } else {
299+ setState (() {
300+ _hasLocalView = true ;
301+ _localTrackView = track.attach (
302+ alignment: Alignment .center,
303+ scalingType: ScalingType .fit,
304+ );
305+ });
306+ }
300307 } else {
301308 StringeeVideoView videoView = track.attach (
302309 isOverlay: true ,
@@ -339,16 +346,21 @@ class RoomState extends State<Room> {
339346 // remove foreground service notification
340347 flutterLocalNotificationsPlugin
341348 .resolvePlatformSpecificImplementation<
342- AndroidFlutterLocalNotificationsPlugin > ()
349+ AndroidFlutterLocalNotificationsPlugin > ()
343350 ? .stopForegroundService ();
344351
345352 _room.unpublish (_shareTrack).then ((result) {
346353 if (result['status' ]) {
347- _shareTrack.close ().then ((value) {
348- if (result['status' ]) {
349- setState (() {
350- _sharingScreen = false ;
351- });
354+ setState (() {
355+ _sharingScreen = false ;
356+ if (_remoteTracks.length > 0 ) {
357+ for (int i = 0 ; i < _remoteTracks.length; i++ ) {
358+ StringeeVideoTrack track = _remoteTracks[i];
359+ if (track.localId == _shareTrack.localId) {
360+ _remoteTracks.removeAt (i);
361+ _remoteTrackViews.removeAt (i);
362+ }
363+ }
352364 }
353365 });
354366 }
@@ -362,7 +374,7 @@ class RoomState extends State<Room> {
362374 setState (() {
363375 _sharingScreen = true ;
364376 _shareTrack = result['body' ];
365- // _trackList .add(_shareTrack);
377+ _remoteTracks .add (_shareTrack);
366378 });
367379 }
368380 });
@@ -405,29 +417,20 @@ class RoomState extends State<Room> {
405417 }
406418
407419 void leaveRoomTapped () {
408- // Sửa chỉ cần gọi hàm leave thôi
409- print ("========== leaveRoomTapped" );
410-
411- _room.leave (allClient: true ).then ((value) {
412- print ("========== Leave room: " + value.toString ());
413- clearDataEndDismiss ();
420+ _room.leave (allClient: false ).then ((result) {
421+ if (result['status' ]) {
422+ if (_sharingScreen) {
423+ createForegroundServiceNotification ();
424+ }
425+ clearDataEndDismiss ();
426+ }
414427 });
415-
416- // _room.unpublish(_localTrack).then((result) {
417- // if (result['status']) {
418- // _localTrack.close().then((value) {
419- // if (result['status']) {
420- // _room.leave(allClient: false).then((value) {
421- // clearDataEndDismiss();
422- // });
423- // }
424- // });
425- // }
426- // });
427428 }
428429
429430 void clearDataEndDismiss () {
430- _room.destroy ();
431+ if (_room != null ) {
432+ _room.destroy ();
433+ }
431434 Navigator .pop (context);
432435 }
433436}
0 commit comments