import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_callkit_incoming/entities/call_event.dart'; import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart'; import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart'; import 'package:get_it/get_it.dart'; import 'package:hmg_patient_app_new/presentation/onboarding/onboarding_screen.dart'; import 'package:hmg_patient_app_new/presentation/onboarding/splash_animation_screen.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; // import 'package:hmg_patient_app_new/presentation/authantication/login.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_screen.dart'; import 'package:hmg_patient_app_new/services/cache_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:lottie/lottie.dart'; import 'package:provider/provider.dart'; import 'core/cache_consts.dart'; import 'core/utils/local_notifications.dart'; import 'core/utils/push_notification_handler.dart'; class SplashPage extends StatefulWidget { @override _SplashScreenState createState() => _SplashScreenState(); } class _SplashScreenState extends State { late AuthenticationViewModel authVm; Future initializeStuff() async { listenerEvent(); Timer( Duration(milliseconds: 500), () async { ApiConsts.setBackendURLs(); PushNotificationHandler().init(context); // Asyncronously }, ); await authVm.getServicePrivilege(); Timer(Duration(seconds: 2, milliseconds: 500), () async { bool isAppOpenedFromCall = await GetIt.instance().getBool(key: CacheConst.isAppOpenedFromCall) ?? false; LocalNotification.init(onNotificationClick: (payload) {}); if (isAppOpenedFromCall) { navigateToTeleConsult(); } else { if (await Utils.getBoolFromPrefs(CacheConst.firstLaunch)) { // Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: OnboardingScreen()))); Navigator.of(context).pushReplacement(FadePage(page: OnboardingScreen())); } else { // Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: LandingNavigation()))); Navigator.of(context).pushReplacement(FadePage(page: LandingNavigation())); } } }); var zoom = ZoomVideoSdk(); InitConfig initConfig = InitConfig( domain: "zoom.us", enableLog: false, ); zoom.initSdk(initConfig); } navigateToTeleConsult() async { String roomID = await Utils.getStringFromPrefs(CacheConst.zoomRoomID); print('RoomID: $roomID'); // GetIt.instance().remove(key: CacheConst.isAppOpenedFromCall); Utils.removeFromPrefs(CacheConst.isAppOpenedFromCall); Navigator.of(GetIt.instance().navigatorKey.currentContext!).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: LandingNavigation()))); Navigator.pushReplacementNamed( // context, GetIt.instance().navigatorKey.currentContext!, AppRoutes.zoomCallPage, // arguments: CallArguments(appointmentID, "111", "Patient", "40", "1", true, 1), arguments: CallArguments(roomID, "123", "Patient", "40", "0", true, 1), // arguments: CallArguments("SmallDailyStandup9875", "123", "Patient", "40", "0", false, int.parse(widget.incomingCallData!.appointmentNo!)), ); } Future listenerEvent() async { print('Call Canceled : ------->'); try { FlutterCallkitIncoming.onEvent.listen((event) async { switch (event!.event) { case Event.actionCallIncoming: print('actionCallIncoming Event Received: ------->'); break; case Event.actionCallStart: print('actionCallStart Event Received: ------->'); break; case Event.actionCallAccept: print('actionCallAccept Event Received: ------->'); FlutterCallkitIncoming.endAllCalls(); try { navigateToTeleConsult(); // String roomID = await Utils.getStringFromPrefs(SharedPrefsConsts.ZOOM_ROOM_ID); // String roomPass = await Utils.getStringFromPrefs(SharedPrefsConsts.ZOOM_ROOM_PASS); // print('RoomID: $roomID'); // print('RoomPass: $roomPass'); // Future.delayed(const Duration(milliseconds: 3000), () async { // // try { // // String teleConsultURL = "https://teleconsult.meena-health.com/api/videocall/doVideoCall?roomid="; // // await Utils.getStringFromPrefs(SharedPrefsConsts.PATIENT_MRN).then((value) { // // teleConsultURL = teleConsultURL + value; // // print("TeleConsult URL: $teleConsultURL"); // // Uri uri = Uri.parse(teleConsultURL); // // launchUrl(uri, mode: LaunchMode.externalApplication, webOnlyWindowName: "TeleConsult"); // // }); // // // var cameraStatus = await Permission.camera.request(); // // var micStatus = await Permission.microphone.request(); // // var permissionStatus = await [Permission.microphone, Permission.camera, Permission.notification].request(); // // if (permissionStatus[1]?.isDenied == true) { // // await Permission.camera.request(); // // } // // if (permissionStatus[0]?.isDenied == true) { // // await Permission.microphone.request(); // // } // // Navigator.pushNamed( // // context, // navigatorKey.currentContext!, // AppRoutes.zoomCallPage, // // arguments: CallArguments(appointmentID, "111", "Patient", "40", "1", true, 1), // arguments: CallArguments(roomID, roomPass, "Patient", "40", "0", true, 1), // // arguments: CallArguments("SmallDailyStandup9875", "123", "Patient", "40", "0", false, int.parse(widget.incomingCallData!.appointmentNo!)), // ); // // } catch (err) { // // print(err); // // } // }); // String teleConsultURL = "https://teleconsult.meena-health.com/api/videocall/doVideoCall?roomid="; // await Utils.getStringFromPrefs(SharedPrefsConsts.PATIENT_MRN).then((value) { // teleConsultURL = teleConsultURL + value; // print("TeleConsult URL: $teleConsultURL"); // Uri uri = Uri.parse(teleConsultURL); // launchUrl(uri, mode: LaunchMode.inAppBrowserView, webOnlyWindowName: "Test"); // }); // navigatorKey.currentState!.pushNamed(AppRoutes.incomingCallScreenRoute); // await Navigator.pushNamed(context, AppRoutes.incomingCallScreenRoute).then((value) {}); } catch (e) { print("ERRORRRR!!! ${e.toString()}"); // await AppSharedPreferences().setObject('call_data', data); // var data1 = await AppSharedPreferences().getObject('call_data'); } break; case Event.actionCallDecline: print('actionCallConnected Event Received: ------->'); await FlutterCallkitIncoming.endAllCalls(); GetIt.instance().remove(key: CacheConst.isAppOpenedFromCall); break; case Event.actionCallEnded: break; case Event.actionCallTimeout: break; case Event.actionCallCallback: break; case Event.actionCallToggleHold: break; case Event.actionCallToggleMute: break; case Event.actionCallToggleDmtf: break; case Event.actionCallToggleGroup: break; case Event.actionCallToggleAudioSession: break; case Event.actionDidUpdateDevicePushTokenVoip: break; case Event.actionCallCustom: break; case Event.actionCallConnected: print('actionCallConnected Event Received: ------->'); await FlutterCallkitIncoming.endAllCalls(); break; } }); } on Exception catch (e) { print(e); print("ERRORRRR!!! ${e.toString()}"); } } /// load the Privilege from service Future loadPrivilege() async { // ProjectViewModel projectProvider = Provider.of(context, listen: false); // projectProvider.setPrivilegeModelList(privilege: _privilegeService.privilegeModelList); // projectProvider.setVidaPlusProjectList(_privilegeService.vidaPlusProjectListModel); // projectProvider.setHMCProjectList(_privilegeService.hMCProjectListModel); // projectProvider.setProjectsDetailList(_privilegeService.projectDetailListModel); // double lat = await AppSharedPreferences().getDouble(USER_LAT) ?? 0.0; // double long = await AppSharedPreferences().getDouble(USER_LONG) ?? 0.0; // AppSharedPreferences().clear(); // Clearing Shared Preferences On App Launch // await AppSharedPreferences().setDouble(USER_LAT, lat); // await AppSharedPreferences().setDouble(USER_LONG, long); // AppSharedPreferences().setString(APP_LANGUAGE, projectProvider.isArabic ? "ar" : "en"); // var themeNotifier = Provider.of(context, listen: false); // themeNotifier.setTheme(defaultTheme(fontName: projectProvider.isArabic ? 'Cairo' : 'Poppins')); // PushNotificationHandler().init(context); // Asyncronously } @override void initState() { authVm = context.read(); super.initState(); initializeStuff(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.whiteColor, body: Lottie.asset(AppAnimations.loadingAnimation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 80.h, height: 80.h, fit: BoxFit.fill).center); } }