@ -3,30 +3,27 @@ import 'dart:async';
import ' package:diplomaticquarterapp/pages/conference/conference_button_bar.dart ' ;
import ' package:diplomaticquarterapp/pages/conference/draggable_publisher.dart ' ;
import ' package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart ' ;
import ' package:diplomaticquarterapp/uitl/app_toast.dart ' ;
import ' package:flutter/cupertino.dart ' ;
import ' package:flutter/foundation.dart ' ;
import ' package:flutter/gestures.dart ' ;
import ' package:flutter/material.dart ' ;
import ' package:flutter/rendering.dart ' ;
import ' package:flutter/services.dart ' ;
import ' package:flutter_ios_voip_kit/flutter_ios_voip_kit.dart ' ;
import ' OpenTokPlatformBridge.dart ' ;
class OpenTokConnectCallPage extends StatefulWidget {
class OpenTokConnectCallPage extends StatefulWidget {
final String sessionId ;
final String token ;
final String apiKey ;
OpenTokConnectCallPage ( { @ required this . sessionId , @ required this . token , @ required this . apiKey } ) ;
@ override
State < StatefulWidget > createState ( ) = > OpenTokState ( ) ;
}
class OpenTokState extends State < OpenTokConnectCallPage > {
class OpenTokState extends State < OpenTokConnectCallPage > {
OpenTokPlatformBridge openTokPlatform ;
OpenTokSDKState sdkState = OpenTokSDKState . LOGGED_OUT ;
@ -37,17 +34,15 @@ class OpenTokState extends State<OpenTokConnectCallPage>{
var audioMute = false ;
var videoMute = false ;
final voIPKit = FlutterIOSVoIPKit . instance ;
initOpenTok ( ) {
initOpenTok ( ) {
openTokPlatform = OpenTokPlatformBridge . init (
apiKey: widget . apiKey ,
sessionID: widget . sessionId ,
token: widget . token ,
onStateChange: ( state ) {
setState ( ( ) = > sdkState = state ) ;
}
) ;
} ) ;
}
@ override
@ -63,30 +58,33 @@ class OpenTokState extends State<OpenTokConnectCallPage>{
appBar: AppBar (
backgroundColor: Colors . transparent ,
actions: [
TextButton ( onPressed: ( ) {
initOpenTok ( ) ;
} , child: Icon ( Icons . connect_without_contact_outlined , color: Colors . green , ) )
TextButton (
onPressed: ( ) {
initOpenTok ( ) ;
} ,
child: Icon (
Icons . connect_without_contact_outlined ,
color: Colors . green ,
) )
] ,
) ,
body: Stack (
fit: StackFit . expand ,
children: [
if ( sdkState = = OpenTokSDKState . LOGGED_IN )
. . . platformVideoViews ( ) ,
if ( sdkState = = OpenTokSDKState . LOGGED_OUT )
Center ( child: Text ( " Logged Out " ) , ) ,
if ( sdkState = = OpenTokSDKState . ERROR )
Center ( child: Text ( " Error opening session " ) , ) ,
if ( sdkState = = OpenTokSDKState . WAIT )
Center ( child: CircularProgressIndicator ( ) , ) ,
if ( sdkState = = OpenTokSDKState . ON_CALL )
Container ( ) ,
if ( sdkState = = OpenTokSDKState . LOGGED_IN ) . . . platformVideoViews ( ) ,
if ( sdkState = = OpenTokSDKState . LOGGED_OUT )
Center (
child: Text ( " Logged Out " ) ,
) ,
if ( sdkState = = OpenTokSDKState . ERROR )
Center (
child: Text ( " Error opening session " ) ,
) ,
if ( sdkState = = OpenTokSDKState . WAIT )
Center (
child: CircularProgressIndicator ( ) ,
) ,
if ( sdkState = = OpenTokSDKState . ON_CALL ) Container ( ) ,
ConferenceButtonBar (
audioEnabled: _audioButton . stream ,
videoEnabled: _videoButton . stream ,
@ -106,20 +104,17 @@ class OpenTokState extends State<OpenTokConnectCallPage>{
}
bool remoteVideoOnFull = true ;
List < Widget > platformVideoViews ( ) {
return [
SizedBox (
width: MediaQuery . of ( context ) . size . width , height: MediaQuery . of ( context ) . size . height ,
child: remoteVideoOnFull ? remotePlatformVideoView ( ) : localPlatformVideoView ( )
) ,
List < Widget > platformVideoViews ( ) {
return [
SizedBox ( width: MediaQuery . of ( context ) . size . width , height: MediaQuery . of ( context ) . size . height , child: remoteVideoOnFull ? remotePlatformVideoView ( ) : localPlatformVideoView ( ) ) ,
DraggablePublisher (
onButtonBarHeight: ( ( double ) async * { } ( 50 ) ) ,
onButtonBarVisible: ( ( bool ) async * { } ( true ) ) ,
onButtonBarHeight: ( ( double ) async * { } ( 50 ) ) ,
onButtonBarVisible: ( ( bool ) async * { } ( true ) ) ,
availableScreenSize: MediaQuery . of ( context ) . size ,
child: InkWell (
child: ( remoteVideoOnFull ? localPlatformVideoView ( ) : remotePlatformVideoView ( ) ) ,
onTap: ( ) {
onTap: ( ) {
print ( ' ' ) ;
} ,
) ,
@ -127,93 +122,87 @@ class OpenTokState extends State<OpenTokConnectCallPage>{
] ;
}
Widget localPlatformVideoView ( ) {
Widget localPlatformVideoView ( ) {
return PlatformViewLink (
viewType: ' local-video-container ' , / / custom platform - view - type
surfaceFactory:
( BuildContext context , PlatformViewController controller ) {
return AndroidViewSurface (
controller: controller ,
gestureRecognizers: const < Factory < OneSequenceGestureRecognizer > > { } ,
hitTestBehavior: PlatformViewHitTestBehavior . opaque ,
) ;
} ,
onCreatePlatformView: ( PlatformViewCreationParams params ) {
return PlatformViewsService . initSurfaceAndroidView (
id: params . id ,
viewType: ' local-video-container ' ,
/ / custom platform - view - type ,
layoutDirection: TextDirection . ltr ,
creationParams: { } ,
creationParamsCodec: StandardMessageCodec ( ) ,
)
. . addOnPlatformViewCreatedListener ( params . onPlatformViewCreated )
. . create ( ) ;
} ,
) ;
viewType: ' local-video-container ' , / / custom platform - view - type
surfaceFactory: ( BuildContext context , PlatformViewController controller ) {
return AndroidViewSurface (
controller: controller ,
gestureRecognizers: const < Factory < OneSequenceGestureRecognizer > > { } ,
hitTestBehavior: PlatformViewHitTestBehavior . opaque ,
) ;
} ,
onCreatePlatformView: ( PlatformViewCreationParams params ) {
return PlatformViewsService . initSurfaceAndroidView (
id: params . id ,
viewType: ' local-video-container ' ,
/ / custom platform - view - type ,
layoutDirection: TextDirection . ltr ,
creationParams: { } ,
creationParamsCodec: StandardMessageCodec ( ) ,
)
. . addOnPlatformViewCreatedListener ( params . onPlatformViewCreated )
. . create ( ) ;
} ,
) ;
}
Widget remotePlatformVideoView ( ) {
Widget remotePlatformVideoView ( ) {
return PlatformViewLink (
viewType: ' remote-video-container ' , / / custom platform - view - type
surfaceFactory:
( BuildContext context , PlatformViewController controller ) {
return AndroidViewSurface (
controller: controller ,
gestureRecognizers: const < Factory < OneSequenceGestureRecognizer > > { } ,
hitTestBehavior: PlatformViewHitTestBehavior . opaque ,
) ;
} ,
onCreatePlatformView: ( PlatformViewCreationParams params ) {
return PlatformViewsService . initSurfaceAndroidView (
id: params . id ,
viewType: ' remote-video-container ' ,
/ / custom platform - view - type ,
layoutDirection: TextDirection . ltr ,
creationParams: { } ,
creationParamsCodec: StandardMessageCodec ( ) ,
)
. . addOnPlatformViewCreatedListener ( params . onPlatformViewCreated )
. . create ( ) ;
} ,
) ;
viewType: ' remote-video-container ' , / / custom platform - view - type
surfaceFactory: ( BuildContext context , PlatformViewController controller ) {
return AndroidViewSurface (
controller: controller ,
gestureRecognizers: const < Factory < OneSequenceGestureRecognizer > > { } ,
hitTestBehavior: PlatformViewHitTestBehavior . opaque ,
) ;
} ,
onCreatePlatformView: ( PlatformViewCreationParams params ) {
return PlatformViewsService . initSurfaceAndroidView (
id: params . id ,
viewType: ' remote-video-container ' ,
/ / custom platform - view - type ,
layoutDirection: TextDirection . ltr ,
creationParams: { } ,
creationParamsCodec: StandardMessageCodec ( ) ,
)
. . addOnPlatformViewCreatedListener ( params . onPlatformViewCreated )
. . create ( ) ;
} ,
) ;
}
_onAudioEnable ( ) async {
_onAudioEnable ( ) async {
await openTokPlatform . toggleAudio ( ) ;
_audioButton . add ( ! audioMute ) ;
}
_onVideoEnabled ( ) async {
_onVideoEnabled ( ) async {
await openTokPlatform . toggleVideo ( ) ;
_videoButton . add ( ! videoMute ) ;
}
_onSwitchCamera ( ) async {
_onSwitchCamera ( ) async {
await openTokPlatform . swapCamera ( ) ;
}
Future < void > _onHangup ( ) async {
print ( ' onHangup ' ) ;
await openTokPlatform . hangupCall ( ) ;
voIPKit . endCall ( ) ;
endCallAPI ( ) ;
Navigator . of ( context ) . pop ( ) ;
}
void endCallAPI ( ) {
LiveCareService service = new LiveCareService ( ) ;
service . endCallAPI ( widget . sessionId , 2 , context ) . then ( ( res ) {
} ) . catchError ( ( err ) {
service . endCallAPI ( widget . sessionId , 2 , context ) . then ( ( res ) { } ) . catchError ( ( err ) {
print ( err ) ;
} ) ;
}
void _onShowBar ( ) {
setState ( ( ) {
} ) ;
setState ( ( ) { } ) ;
_onButtonBarVisibleStreamController . add ( true ) ;
}
@ -227,5 +216,4 @@ class OpenTokState extends State<OpenTokConnectCallPage>{
} ) ;
_onButtonBarVisibleStreamController . add ( false ) ;
}
}
}