Merge branch 'aamir_dev' into development_aamir_testing

# Conflicts:
#	lib/api/chat/chat_api_client.dart
#	lib/classes/chat_call_kit.dart
#	lib/main.dart
#	lib/provider/chat_call_provider.dart
#	lib/ui/chat/call/chat_incoming_call_screen.dart
#	lib/ui/chat/chat_detailed_screen.dart
#	lib/ui/landing/dashboard_screen.dart
#	lib/ui/login/login_screen.dart
development_aamir_testing23
Aamir Muhammad 3 years ago
commit fb63963905

@ -1,7 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
@ -31,6 +33,8 @@ class ChatApiClient {
"isMobile": true, "isMobile": true,
"deviceToken": AppState().getIsHuawei ? AppState().getHuaweiPushToken : AppState().getDeviceToken, "deviceToken": AppState().getIsHuawei ? AppState().getHuaweiPushToken : AppState().getDeviceToken,
"isHuaweiDevice": AppState().getIsHuawei, "isHuaweiDevice": AppState().getIsHuawei,
//"platform" : "", // ios, android
//"voipToken": ""
}, },
); );
@ -184,7 +188,6 @@ class ChatApiClient {
} }
return imagesData; return imagesData;
} }
// CallUser Login Token // CallUser Login Token
Future<user.UserAutoLoginModel> getUserCallToken({required String userid}) async { Future<user.UserAutoLoginModel> getUserCallToken({required String userid}) async {

@ -17,10 +17,10 @@ import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' a
import 'package:mohem_flutter_app/models/chat/incoming_call_model.dart'; import 'package:mohem_flutter_app/models/chat/incoming_call_model.dart';
import 'package:mohem_flutter_app/provider/chat_call_provider.dart'; import 'package:mohem_flutter_app/provider/chat_call_provider.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:signalr_netcore/hub_connection.dart'; import 'package:signalr_netcore/hub_connection.dart';
import 'package:signalr_netcore/signalr_client.dart'; import 'package:signalr_netcore/signalr_client.dart';
import 'package:workmanager/workmanager.dart';
class ChatVoipCall { class ChatVoipCall {
static final ChatVoipCall _instance = ChatVoipCall._internal(); static final ChatVoipCall _instance = ChatVoipCall._internal();

@ -20,8 +20,6 @@ import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart'; import 'package:provider/single_child_widget.dart';
import 'package:signalr_netcore/hub_connection.dart'; import 'package:signalr_netcore/hub_connection.dart';
import 'package:sizer/sizer.dart'; import 'package:sizer/sizer.dart';
import 'package:workmanager/workmanager.dart';
late HubConnection chatHubConnection; late HubConnection chatHubConnection;
Logger logger = Logger( Logger logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode) // filter: null, // Use the default LogFilter (-> only log in debug mode)
@ -31,8 +29,6 @@ Logger logger = Logger(
// output: null, // U // output: null, // U
); );
late BuildContext callGlobalContext;
class MyHttpOverrides extends HttpOverrides { class MyHttpOverrides extends HttpOverrides {
@override @override
HttpClient createHttpClient(SecurityContext? context) { HttpClient createHttpClient(SecurityContext? context) {
@ -41,8 +37,6 @@ class MyHttpOverrides extends HttpOverrides {
} }
bool isTablet = false; bool isTablet = false;
const simpleTaskKey = "decline.call.byUser";
Future<void> main() async { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();

@ -15,6 +15,7 @@ import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_model.da
import 'package:mohem_flutter_app/models/chat/webrtc_payloads.dart'; import 'package:mohem_flutter_app/models/chat/webrtc_payloads.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/ui/chat/call/chat_incoming_call_screen.dart'; import 'package:mohem_flutter_app/ui/chat/call/chat_incoming_call_screen.dart';
import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
import 'package:signalr_netcore/hub_connection.dart'; import 'package:signalr_netcore/hub_connection.dart';
class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {

@ -92,459 +92,459 @@ class _StartCallPageState extends State<StartCallPage> {
builder: (BuildContext context, ChatCallProvider provider, ChatProviderModel cpm, Widget? child) { builder: (BuildContext context, ChatCallProvider provider, ChatProviderModel cpm, Widget? child) {
return provider.isIncomingCallLoader return provider.isIncomingCallLoader
? const SizedBox( ? const SizedBox(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
child: Center(child: CircularProgressIndicator()), child: Center(child: CircularProgressIndicator()),
) )
: provider.isIncomingCall : provider.isIncomingCall
? SizedBox( ? SizedBox(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
child: Stack( child: Stack(
alignment: FractionalOffset.center, alignment: FractionalOffset.center,
children: <Widget>[ children: <Widget>[
if (!provider.isAudioCall && provider.isVideoCall) if (!provider.isAudioCall && provider.isVideoCall)
Positioned.fill( Positioned.fill(
child: RTCVideoView( child: RTCVideoView(
provider.remoteRenderer!, provider.remoteRenderer!,
objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
key: const Key('remote'), key: const Key('remote'),
), ),
), ),
if (provider.isVideoCall) if (provider.isVideoCall)
DraggableWidget( DraggableWidget(
bottomMargin: 20, bottomMargin: 20,
topMargin: 40, topMargin: 40,
intialVisibility: true, intialVisibility: true,
horizontalSpace: 20, horizontalSpace: 20,
shadowBorderRadius: 50, shadowBorderRadius: 50,
initialPosition: AnchoringPosition.topLeft, initialPosition: AnchoringPosition.topLeft,
dragController: dragController, dragController: dragController,
normalShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0), normalShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0),
draggingShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0), draggingShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0),
child: SizedBox( child: SizedBox(
height: 200, height: 200,
width: 140, width: 140,
child: RTCVideoView( child: RTCVideoView(
provider.localVideoRenderer!, provider.localVideoRenderer!,
mirror: true, mirror: true,
objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
), ),
), ),
),
if (!provider.isVideoCall)
Positioned.fill(
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: Container(
decoration: BoxDecoration(
color: MyColors.grey57Color.withOpacity(
0.3,
), ),
if (!provider.isVideoCall) ),
Positioned.fill( child: Column(
child: ClipRect( crossAxisAlignment: CrossAxisAlignment.start,
child: BackdropFilter( mainAxisSize: MainAxisSize.max,
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), children: <Widget>[
child: Container( 40.height,
decoration: BoxDecoration( Row(
color: MyColors.grey57Color.withOpacity( crossAxisAlignment: CrossAxisAlignment.center,
0.3, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
margin: const EdgeInsets.all(21.0),
child: Container(
margin: const EdgeInsets.only(
left: 10.0,
right: 10.0,
), ),
), child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min,
mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[ children: <Widget>[
40.height, SvgPicture.asset(
Row( "assets/images/user.svg",
crossAxisAlignment: CrossAxisAlignment.center, height: 70,
mainAxisAlignment: MainAxisAlignment.center, width: 70,
children: <Widget>[ fit: BoxFit.cover,
Container( ),
margin: const EdgeInsets.all(21.0), 10.height,
child: Container( Text(
margin: const EdgeInsets.only( provider.incomingCallData.targetUserName!,
left: 10.0, style: const TextStyle(
right: 10.0, fontSize: 21,
), decoration: TextDecoration.none,
child: Column( fontWeight: FontWeight.bold,
crossAxisAlignment: CrossAxisAlignment.center, color: MyColors.white,
mainAxisSize: MainAxisSize.min, letterSpacing: -1.26,
mainAxisAlignment: MainAxisAlignment.spaceAround, height: 23 / 12,
children: <Widget>[ ),
SvgPicture.asset( ),
"assets/images/user.svg", const Text(
height: 70, "On Call",
width: 70, style: TextStyle(
fit: BoxFit.cover, fontSize: 16,
), decoration: TextDecoration.none,
10.height, fontWeight: FontWeight.w600,
Text( color: Color(
provider.incomingCallData.targetUserName!, 0xffC6C6C6,
style: const TextStyle(
fontSize: 21,
decoration: TextDecoration.none,
fontWeight: FontWeight.bold,
color: MyColors.white,
letterSpacing: -1.26,
height: 23 / 12,
),
),
const Text(
"On Call",
style: TextStyle(
fontSize: 16,
decoration: TextDecoration.none,
fontWeight: FontWeight.w600,
color: Color(
0xffC6C6C6,
),
letterSpacing: -0.48,
height: 23 / 24,
),
),
const SizedBox(
height: 2,
),
],
),
), ),
letterSpacing: -0.48,
height: 23 / 24,
), ),
], ),
), const SizedBox(
], height: 2,
), ),
), ],
), ),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
padding: const EdgeInsets.only(
bottom: 20,
left: 40,
right: 40,
),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
// if (provider.isVideoCall)
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.loudOn();
},
elevation: 2.0,
fillColor: provider.isLoudSpeaker ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.volume_up,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.camOff();
},
elevation: 2.0,
fillColor: provider.isCamOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isCamOff ? Icons.videocam_off : Icons.videocam,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.switchCamera();
},
elevation: 2.0,
fillColor: provider.isFrontCamera ? Colors.grey : MyColors.textMixColor,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isFrontCamera ? Icons.switch_camera_outlined : Icons.switch_camera,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.micOff();
},
elevation: 2.0,
fillColor: provider.isMicOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isMicOff ? Icons.mic_off : Icons.mic,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.endCall(isUserOnline: cpm.isUserOnline).then((bool value) {
if (value) {
Navigator.of(context).pop();
// print("Reintiiiiiiitttiiiiiiii");
// provider.initStreams();
}
});
},
elevation: 2.0,
fillColor: MyColors.redA3Color,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.call_end,
color: MyColors.white,
size: 30.0,
), ),
), ),
], ],
), ),
), ],
), ),
], ),
), ),
) ),
: provider.isOutGoingCall ),
? SizedBox( Align(
width: double.infinity, alignment: Alignment.bottomCenter,
height: double.infinity, child: Container(
child: Stack( padding: const EdgeInsets.only(
alignment: FractionalOffset.center, bottom: 20,
left: 40,
right: 40,
),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
// if (provider.isVideoCall)
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.loudOn();
},
elevation: 2.0,
fillColor: provider.isLoudSpeaker ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.volume_up,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.camOff();
},
elevation: 2.0,
fillColor: provider.isCamOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isCamOff ? Icons.videocam_off : Icons.videocam,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.switchCamera();
},
elevation: 2.0,
fillColor: provider.isFrontCamera ? Colors.grey : MyColors.textMixColor,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isFrontCamera ? Icons.switch_camera_outlined : Icons.switch_camera,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.micOff();
},
elevation: 2.0,
fillColor: provider.isMicOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isMicOff ? Icons.mic_off : Icons.mic,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.endCall(isUserOnline: cpm.isUserOnline).then((bool value) {
if (value) {
Navigator.of(context).pop();
// print("Reintiiiiiiitttiiiiiiii");
// provider.initStreams();
}
});
},
elevation: 2.0,
fillColor: MyColors.redA3Color,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.call_end,
color: MyColors.white,
size: 30.0,
),
),
],
),
),
),
],
),
)
: provider.isOutGoingCall
? SizedBox(
width: double.infinity,
height: double.infinity,
child: Stack(
alignment: FractionalOffset.center,
children: <Widget>[
if (!provider.isAudioCall && provider.isVideoCall)
Positioned.fill(
child: RTCVideoView(
provider.remoteRenderer!,
objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
key: const Key('remote'),
),
),
if (provider.isVideoCall)
DraggableWidget(
bottomMargin: 20,
topMargin: 40,
intialVisibility: true,
horizontalSpace: 20,
shadowBorderRadius: 50,
initialPosition: AnchoringPosition.topLeft,
dragController: dragController,
normalShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0),
draggingShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0),
child: SizedBox(
height: 200,
width: 140,
child: RTCVideoView(
provider.localVideoRenderer!,
mirror: true,
objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
),
),
),
if (!provider.isVideoCall)
Positioned.fill(
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: Container(
decoration: BoxDecoration(
color: MyColors.grey57Color.withOpacity(
0.3,
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
if (!provider.isAudioCall && provider.isVideoCall) 40.height,
Positioned.fill( Row(
child: RTCVideoView( crossAxisAlignment: CrossAxisAlignment.center,
provider.remoteRenderer!, mainAxisAlignment: MainAxisAlignment.center,
objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover, children: <Widget>[
key: const Key('remote'), Container(
), margin: const EdgeInsets.all(21.0),
), child: Container(
if (provider.isVideoCall) margin: const EdgeInsets.only(
DraggableWidget( left: 10.0,
bottomMargin: 20, right: 10.0,
topMargin: 40, ),
intialVisibility: true, child: Column(
horizontalSpace: 20, crossAxisAlignment: CrossAxisAlignment.center,
shadowBorderRadius: 50, mainAxisSize: MainAxisSize.min,
initialPosition: AnchoringPosition.topLeft, mainAxisAlignment: MainAxisAlignment.spaceAround,
dragController: dragController, children: <Widget>[
normalShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0), SvgPicture.asset(
draggingShadow: const BoxShadow(spreadRadius: 0.0, blurRadius: 0.0), "assets/images/user.svg",
child: SizedBox( height: 70,
height: 200, width: 70,
width: 140, fit: BoxFit.cover,
child: RTCVideoView(
provider.localVideoRenderer!,
mirror: true,
objectFit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
),
),
),
if (!provider.isVideoCall)
Positioned.fill(
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: Container(
decoration: BoxDecoration(
color: MyColors.grey57Color.withOpacity(
0.3,
), ),
), 10.height,
child: Column( Text(
crossAxisAlignment: CrossAxisAlignment.start, provider.outGoingCallData.receiverName!,
mainAxisSize: MainAxisSize.max, style: const TextStyle(
children: <Widget>[ fontSize: 21,
40.height, decoration: TextDecoration.none,
Row( fontWeight: FontWeight.bold,
crossAxisAlignment: CrossAxisAlignment.center, color: MyColors.white,
mainAxisAlignment: MainAxisAlignment.center, letterSpacing: -1.26,
children: <Widget>[ height: 23 / 12,
Container(
margin: const EdgeInsets.all(21.0),
child: Container(
margin: const EdgeInsets.only(
left: 10.0,
right: 10.0,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
SvgPicture.asset(
"assets/images/user.svg",
height: 70,
width: 70,
fit: BoxFit.cover,
),
10.height,
Text(
provider.outGoingCallData.receiverName!,
style: const TextStyle(
fontSize: 21,
decoration: TextDecoration.none,
fontWeight: FontWeight.bold,
color: MyColors.white,
letterSpacing: -1.26,
height: 23 / 12,
),
),
const Text(
"On Call",
style: TextStyle(
fontSize: 16,
decoration: TextDecoration.none,
fontWeight: FontWeight.w600,
color: Color(
0xffC6C6C6,
),
letterSpacing: -0.48,
height: 23 / 24,
),
),
const SizedBox(
height: 2,
),
],
),
),
),
],
), ),
], ),
), const Text(
"On Call",
style: TextStyle(
fontSize: 16,
decoration: TextDecoration.none,
fontWeight: FontWeight.w600,
color: Color(
0xffC6C6C6,
),
letterSpacing: -0.48,
height: 23 / 24,
),
),
const SizedBox(
height: 2,
),
],
), ),
), ),
), ),
), ],
Align(
alignment: Alignment.bottomCenter,
child: Container(
padding: const EdgeInsets.only(
bottom: 20,
left: 40,
right: 40,
),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
// if (provider.isVideoCall)
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.loudOn();
},
elevation: 2.0,
fillColor: provider.isLoudSpeaker ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.volume_up,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.camOff();
},
elevation: 2.0,
fillColor: provider.isCamOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isCamOff ? Icons.videocam_off : Icons.videocam,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.switchCamera();
},
elevation: 2.0,
fillColor: provider.isFrontCamera ? Colors.grey : MyColors.textMixColor,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isFrontCamera ? Icons.switch_camera_outlined : Icons.switch_camera,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.micOff();
},
elevation: 2.0,
fillColor: provider.isMicOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isMicOff ? Icons.mic_off : Icons.mic,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.endCall(isUserOnline: cpm.isUserOnline).then((bool value) {
if (value) {
Navigator.of(context).pop();
}
});
},
elevation: 2.0,
fillColor: MyColors.redA3Color,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.call_end,
color: MyColors.white,
size: 30.0,
),
),
],
),
),
), ),
], ],
), ),
) ),
: const SizedBox(); ),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
padding: const EdgeInsets.only(
bottom: 20,
left: 40,
right: 40,
),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
// if (provider.isVideoCall)
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.loudOn();
},
elevation: 2.0,
fillColor: provider.isLoudSpeaker ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.volume_up,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.camOff();
},
elevation: 2.0,
fillColor: provider.isCamOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isCamOff ? Icons.videocam_off : Icons.videocam,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.switchCamera();
},
elevation: 2.0,
fillColor: provider.isFrontCamera ? Colors.grey : MyColors.textMixColor,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isFrontCamera ? Icons.switch_camera_outlined : Icons.switch_camera,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.micOff();
},
elevation: 2.0,
fillColor: provider.isMicOff ? MyColors.textMixColor : Colors.grey,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: Icon(
provider.isMicOff ? Icons.mic_off : Icons.mic,
color: MyColors.white,
size: 30.0,
),
),
RawMaterialButton(
constraints: const BoxConstraints(),
onPressed: () {
provider.endCall(isUserOnline: cpm.isUserOnline).then((bool value) {
if (value) {
Navigator.of(context).pop();
}
});
},
elevation: 2.0,
fillColor: MyColors.redA3Color,
padding: const EdgeInsets.all(
10.0,
),
shape: const CircleBorder(),
child: const Icon(
Icons.call_end,
color: MyColors.white,
size: 30.0,
),
),
],
),
),
),
],
),
)
: const SizedBox();
}, },
), ),
); );

@ -96,32 +96,32 @@ class _ChatDetailScreenState extends State<ChatDetailScreen> {
showTyping: true, showTyping: true,
chatUser: params!.chatUser, chatUser: params!.chatUser,
actions: [ actions: [
// if (Platform.isAndroid) // if (Platform.isAndroid)
SvgPicture.asset("assets/icons/chat/call.svg", width: 21, height: 23).onPress(() async { SvgPicture.asset("assets/icons/chat/call.svg", width: 21, height: 23).onPress(() async {
Future<PermissionStatus> micPer = Permission.microphone.request(); Future<PermissionStatus> micPer = Permission.microphone.request();
if (await micPer.isGranted) { if (await micPer.isGranted) {
makeCall(callType: "AUDIO");
} else {
Permission.microphone.request().isGranted.then((value) {
makeCall(callType: "AUDIO"); makeCall(callType: "AUDIO");
} else { });
Permission.microphone.request().isGranted.then((value) { }
makeCall(callType: "AUDIO"); }),
}); // if (Platform.isAndroid)
} 24.width,
}), // if (Platform.isAndroid)
// if (Platform.isAndroid) SvgPicture.asset("assets/icons/chat/video_call.svg", width: 21, height: 18).onPress(() async {
24.width, Future<PermissionStatus> camPer = Permission.camera.request();
// if (Platform.isAndroid) if (await camPer.isGranted) {
SvgPicture.asset("assets/icons/chat/video_call.svg", width: 21, height: 18).onPress(() async { makeCall(callType: "VIDEO");
Future<PermissionStatus> camPer = Permission.camera.request(); } else {
if (await camPer.isGranted) { Permission.camera.request().isGranted.then((value) {
makeCall(callType: "VIDEO"); makeCall(callType: "VIDEO");
} else { });
Permission.camera.request().isGranted.then((value) { }
makeCall(callType: "VIDEO"); }),
}); // if (Platform.isAndroid)
} 21.width,
}),
// if (Platform.isAndroid)
21.width,
], ],
), ),
body: SafeArea( body: SafeArea(

@ -221,7 +221,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
print("-------------------- Survey ----------------------------"); print("-------------------- Survey ----------------------------");
if (val.result!.data!.notificationType == "Survey") { if (val.result!.data!.notificationType == "Survey") {
DashboardApiClient().getAdvertisementDetail(val.result!.data!.notificationMasterId ?? "").then( DashboardApiClient().getAdvertisementDetail(val.result!.data!.notificationMasterId ?? "").then(
(ItgMainRes? value) { (ItgMainRes? value) {
if (value!.mohemmItgResponseItem!.statusCode == 200) { if (value!.mohemmItgResponseItem!.statusCode == 200) {
if (value.mohemmItgResponseItem!.result!.data != null) { if (value.mohemmItgResponseItem!.result!.data != null) {
// Navigator.pushNamed(context, AppRoutes.survey, arguments: val.result!.data); // Navigator.pushNamed(context, AppRoutes.survey, arguments: val.result!.data);
@ -237,7 +237,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
} else { } else {
print("------------------------------------------- Ads --------------------"); print("------------------------------------------- Ads --------------------");
DashboardApiClient().getAdvertisementDetail(val.result!.data!.notificationMasterId ?? "").then( DashboardApiClient().getAdvertisementDetail(val.result!.data!.notificationMasterId ?? "").then(
(ItgMainRes? value) { (ItgMainRes? value) {
if (value!.mohemmItgResponseItem!.statusCode == 200) { if (value!.mohemmItgResponseItem!.statusCode == 200) {
if (value.mohemmItgResponseItem!.result!.data != null) { if (value.mohemmItgResponseItem!.result!.data != null) {
Navigator.pushNamed(context, AppRoutes.advertisement, arguments: { Navigator.pushNamed(context, AppRoutes.advertisement, arguments: {
@ -378,106 +378,106 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
child: Consumer<DashboardProviderModel>( child: Consumer<DashboardProviderModel>(
builder: (BuildContext context, DashboardProviderModel model, Widget? child) { builder: (BuildContext context, DashboardProviderModel model, Widget? child) {
return (model.isAttendanceTrackingLoading return (model.isAttendanceTrackingLoading
? GetAttendanceTrackingShimmer() ? GetAttendanceTrackingShimmer()
: Container( : Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
MyColors.gradiantEndColor, MyColors.gradiantEndColor,
MyColors.gradiantStartColor, MyColors.gradiantStartColor,
]), ]),
), ),
child: Stack( child: Stack(
alignment: Alignment.center, alignment: Alignment.center,
children: [
if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (model.isTimeRemainingInSeconds == 0) SvgPicture.asset("assets/images/thumb.svg"), LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
Column( if (model.isTimeRemainingInSeconds == 0) DateTime.now().toString().split(" ")[0].toText12(color: Colors.white),
if (model.isTimeRemainingInSeconds != 0)
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
9.height,
Directionality(
textDirection: ui.TextDirection.ltr,
child: CountdownTimer(
endTime: model.endTime,
onEnd: null,
endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
textStyle: const TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
),
),
LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
9.height,
ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(20)),
child: LinearProgressIndicator(
value: model.progress,
minHeight: 8,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
backgroundColor: const Color(0xff196D73),
),
),
],
),
],
).paddingOnly(top: 12, right: 15, left: 12),
),
Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( LocaleKeys.checkIn.tr().toText12(color: Colors.white),
child: Column( (model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn)
mainAxisSize: MainAxisSize.min, .toString()
crossAxisAlignment: CrossAxisAlignment.start, .toText14(color: Colors.white, isBold: true),
children: [ 4.height,
LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true),
if (model.isTimeRemainingInSeconds == 0) DateTime.now().toString().split(" ")[0].toText12(color: Colors.white),
if (model.isTimeRemainingInSeconds != 0)
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
9.height,
Directionality(
textDirection: ui.TextDirection.ltr,
child: CountdownTimer(
endTime: model.endTime,
onEnd: null,
endWidget: "00:00:00".toText14(color: Colors.white, isBold: true),
textStyle: const TextStyle(color: Colors.white, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.bold),
),
),
LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white),
9.height,
ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(20)),
child: LinearProgressIndicator(
value: model.progress,
minHeight: 8,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
backgroundColor: const Color(0xff196D73),
),
),
],
),
],
).paddingOnly(top: 12, right: 15, left: 12),
),
Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LocaleKeys.checkIn.tr().toText12(color: Colors.white),
(model.attendanceTracking!.pSwipeIn == null ? "--:--" : model.attendanceTracking!.pSwipeIn)
.toString()
.toText14(color: Colors.white, isBold: true),
4.height,
],
).paddingOnly(left: 12, right: 12),
),
Container(
margin: EdgeInsets.only(top: AppState().isArabic(context) ? 6 : 0),
width: 45,
height: 45,
padding: const EdgeInsets.only(left: 10, right: 10),
decoration: BoxDecoration(
color: Color(0xff259EA4),
borderRadius: BorderRadius.only(
bottomRight: AppState().isArabic(context) ? Radius.circular(0) : Radius.circular(15),
bottomLeft: AppState().isArabic(context) ? Radius.circular(15) : Radius.circular(0),
),
),
child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/biometrics.svg" : "assets/images/biometrics.svg"),
).onPress(() {
showMyBottomSheet(
context,
callBackFunc: () {},
child: MarkAttendanceWidget(model, isFromDashboard: true),
);
}),
],
),
], ],
).paddingOnly(left: 12, right: 12),
),
Container(
margin: EdgeInsets.only(top: AppState().isArabic(context) ? 6 : 0),
width: 45,
height: 45,
padding: const EdgeInsets.only(left: 10, right: 10),
decoration: BoxDecoration(
color: Color(0xff259EA4),
borderRadius: BorderRadius.only(
bottomRight: AppState().isArabic(context) ? Radius.circular(0) : Radius.circular(15),
bottomLeft: AppState().isArabic(context) ? Radius.circular(15) : Radius.circular(0),
),
), ),
], child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/biometrics.svg" : "assets/images/biometrics.svg"),
), ).onPress(() {
).onPress( showMyBottomSheet(
() { context,
Navigator.pushNamed(context, AppRoutes.todayAttendance); callBackFunc: () {},
}, child: MarkAttendanceWidget(model, isFromDashboard: true),
)) );
}),
],
),
],
),
],
),
).onPress(
() {
Navigator.pushNamed(context, AppRoutes.todayAttendance);
},
))
.animatedSwither(); .animatedSwither();
}, },
), ),
@ -538,48 +538,48 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
return model.isOffersLoading return model.isOffersLoading
? const OffersShimmerWidget() ? const OffersShimmerWidget()
: InkWell( : InkWell(
onTap: () { onTap: () {
navigateToDetails(data.getOffersList[index]); navigateToDetails(data.getOffersList[index]);
}, },
child: SizedBox( child: SizedBox(
width: 73,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 73, width: 73,
child: Column( height: 73,
crossAxisAlignment: CrossAxisAlignment.center, decoration: BoxDecoration(
children: [ color: Colors.white,
Container( borderRadius: const BorderRadius.all(
width: 73, Radius.circular(100),
height: 73, ),
decoration: BoxDecoration( border: Border.all(color: MyColors.lightGreyE3Color, width: 1),
color: Colors.white, ),
borderRadius: const BorderRadius.all( child: ClipRRect(
Radius.circular(100), borderRadius: const BorderRadius.all(
), Radius.circular(50),
border: Border.all(color: MyColors.lightGreyE3Color, width: 1), ),
), child: Hero(
child: ClipRRect( tag: "ItemImage" + data.getOffersList[index].offersDiscountId.toString()!,
borderRadius: const BorderRadius.all( transitionOnUserGestures: true,
Radius.circular(50), child: Image.network(
), data.getOffersList[index].logo ?? "",
child: Hero( fit: BoxFit.contain,
tag: "ItemImage" + data.getOffersList[index].offersDiscountId.toString()!,
transitionOnUserGestures: true,
child: Image.network(
data.getOffersList[index].logo ?? "",
fit: BoxFit.contain,
),
),
),
),
4.height,
Expanded(
child: AppState().isArabic(context)
? data.getOffersList[index].titleAr!.toText12(isCenter: true, maxLine: 1)
: data.getOffersList[index].titleEn!.toText12(isCenter: true, maxLine: 1),
), ),
], ),
), ),
), ),
); 4.height,
Expanded(
child: AppState().isArabic(context)
? data.getOffersList[index].titleAr!.toText12(isCenter: true, maxLine: 1)
: data.getOffersList[index].titleEn!.toText12(isCenter: true, maxLine: 1),
),
],
),
),
);
}, },
separatorBuilder: (BuildContext cxt, int index) => 8.width, separatorBuilder: (BuildContext cxt, int index) => 8.width,
itemCount: 9), itemCount: 9),
@ -674,27 +674,27 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
children: [ children: [
SvgPicture.asset("assets/icons/chat/chat.svg", color: !checkIfPrivilegedForChat() ? MyColors.lightGreyE3Color : MyColors.grey98Color SvgPicture.asset("assets/icons/chat/chat.svg", color: !checkIfPrivilegedForChat() ? MyColors.lightGreyE3Color : MyColors.grey98Color
// currentIndex == 4 // currentIndex == 4
// ? MyColors.grey3AColor // ? MyColors.grey3AColor
// : cProvider.disableChatForThisUser // : cProvider.disableChatForThisUser
// ? MyColors.lightGreyE3Color // ? MyColors.lightGreyE3Color
// : MyColors.grey98Color, // : MyColors.grey98Color,
) )
.paddingAll(4), .paddingAll(4),
Consumer<ChatProviderModel>( Consumer<ChatProviderModel>(
builder: (BuildContext cxt, ChatProviderModel data, Widget? child) { builder: (BuildContext cxt, ChatProviderModel data, Widget? child) {
return !checkIfPrivilegedForChat() return !checkIfPrivilegedForChat()
? const SizedBox() ? const SizedBox()
: Positioned( : Positioned(
right: 0, right: 0,
top: 0, top: 0,
child: Container( child: Container(
padding: const EdgeInsets.only(left: 4, right: 4), padding: const EdgeInsets.only(left: 4, right: 4),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration(color: data.disableChatForThisUser ? MyColors.pinkDarkColor : MyColors.redColor, borderRadius: BorderRadius.circular(17)), decoration: BoxDecoration(color: data.disableChatForThisUser ? MyColors.pinkDarkColor : MyColors.redColor, borderRadius: BorderRadius.circular(17)),
child: data.chatUConvCounter.toString().toText10(color: Colors.white), child: data.chatUConvCounter.toString().toText10(color: Colors.white),
), ),
); );
}, },
), ),
], ],

@ -33,7 +33,6 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/chat/call.dart'; import 'package:mohem_flutter_app/models/chat/call.dart';
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart'; import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart';
import 'package:mohem_flutter_app/models/chat/incoming_call_model.dart';
import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart'; import 'package:mohem_flutter_app/models/check_mobile_app_version_model.dart';
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart'; import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart';
@ -41,8 +40,8 @@ import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/ui/chat/call/chat_incoming_call_screen.dart'; import 'package:mohem_flutter_app/ui/chat/call/chat_incoming_call_screen.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/button/hmg_connectivity_button.dart';
import 'package:mohem_flutter_app/widgets/input_widget.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart';
import 'package:http/http.dart' as http;
// import 'package:safe_device/safe_device.dart'; // import 'package:safe_device/safe_device.dart';
import 'package:wifi_iot/wifi_iot.dart'; import 'package:wifi_iot/wifi_iot.dart';
@ -56,10 +55,9 @@ class LoginScreen extends StatefulWidget {
} }
} }
class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver { class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver{
TextEditingController username = TextEditingController(); TextEditingController username = TextEditingController();
TextEditingController password = TextEditingController(); TextEditingController password = TextEditingController();
MethodChannel platform = MethodChannel('com.hiennv.flutter_callkit_incoming');
CheckMobileAppVersionModel? _checkMobileAppVersion; CheckMobileAppVersionModel? _checkMobileAppVersion;
MemberLoginListModel? _memberLoginList; MemberLoginListModel? _memberLoginList;
@ -67,6 +65,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
late final FirebaseMessaging _firebaseMessaging; late final FirebaseMessaging _firebaseMessaging;
IosCallPayload? _iosCallPayload; IosCallPayload? _iosCallPayload;
bool _autoLogin = false; bool _autoLogin = false;
bool? isAppOpenBySystem; bool? isAppOpenBySystem;
@ -82,6 +81,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
final voIPKit = FlutterIOSVoIPKit.instance; final voIPKit = FlutterIOSVoIPKit.instance;
late Timer timeOutTimer; late Timer timeOutTimer;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -124,8 +124,8 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
} }
voIPKit.onDidReceiveIncomingPush = ( voIPKit.onDidReceiveIncomingPush = (
Map<String, dynamic> payload, Map<String, dynamic> payload,
) async { ) async {
_iosCallPayload = IosCallPayload.fromJson(payload); _iosCallPayload = IosCallPayload.fromJson(payload);
logger.d(_iosCallPayload!.incomingCallerId!.split("-").last); logger.d(_iosCallPayload!.incomingCallerId!.split("-").last);
print('🎈 example: onDidReceiveIncomingPush $payload'); print('🎈 example: onDidReceiveIncomingPush $payload');
@ -133,18 +133,18 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
}; };
voIPKit.onDidRejectIncomingCall = ( voIPKit.onDidRejectIncomingCall = (
String uuid, String uuid,
String callerId, String callerId,
) async { ) async {
try { try {
var logText = "did reject call $callerId"; var logText = "did reject call $callerId";
} catch (err) {} } catch (err) {}
}; };
voIPKit.onDidAcceptIncomingCall = ( voIPKit.onDidAcceptIncomingCall = (
String uuid, String uuid,
String callerId, String callerId,
) async { ) async {
var callerID = "did accept call $callerId"; var callerID = "did accept call $callerId";
debugPrint(callerID); debugPrint(callerID);
@ -164,6 +164,20 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
}; };
} }
Future<void> connectCall() async {
try {
UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserCallToken(userid: _iosCallPayload!.incomingCallerId!.split("-").last);
if (userLoginResponse.response != null) {
AppState().setchatUserDetails = userLoginResponse;
Utils.saveStringFromPrefs("userLoginChatDetails", jsonEncode(userLoginResponse.response));
}
} catch (e) {
logger.d(e);
}
}
// void checkDeviceSafety() async { // void checkDeviceSafety() async {
// try { // try {
// isJailBroken = await SafeDevice.isJailBroken; // isJailBroken = await SafeDevice.isJailBroken;
@ -179,23 +193,25 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
// print(error); // print(error);
// } // }
// } // }
Future<void> connectCall() async { // Future<void> connectCall() async {
try { // try {
UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserCallToken(userid: _iosCallPayload!.incomingCallerId!.split("-").last); // UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserCallToken(userid: _iosCallPayload!.incomingCallerId!.split("-").last);
if (userLoginResponse.response != null) { // if (userLoginResponse.response != null) {
AppState().setchatUserDetails = userLoginResponse; // AppState().setchatUserDetails = userLoginResponse;
Utils.saveStringFromPrefs("userLoginChatDetails", jsonEncode(userLoginResponse.response)); // Utils.saveStringFromPrefs("userLoginChatDetails", jsonEncode(userLoginResponse.response));
} // }
} catch (e) { // } catch (e) {
logger.d(e); // logger.d(e);
} // }
} // }
Future<void> callListeners() async { Future<void> callListeners() async {
try { try {
print("CallListners Init"); print("Call Listeners Init");
FlutterCallkitIncoming.onEvent.listen((CallEvent? event) async { FlutterCallkitIncoming.onEvent.listen((CallEvent? event) async {
switch (event!.event) { switch (event!.event) {
case Event.actionCallIncoming: case Event.actionCallIncoming:
break; break;
case Event.actionCallStart: case Event.actionCallStart:
@ -274,6 +290,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
@ -284,7 +301,7 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
Future<void> checkFirebaseToken() async { Future<void> checkFirebaseToken() async {
try { try {
//Utils.showLoading(context); Utils.showLoading(context);
if (Platform.isAndroid) { if (Platform.isAndroid) {
try { try {
if (!(await Utils.isGoogleServicesAvailable())) { if (!(await Utils.isGoogleServicesAvailable())) {
@ -390,12 +407,14 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
// 13777 // 13777
// Ab12345cd // Ab12345cd
} }
Utils.showLoading(context); if (isAppOpenBySystem!) checkFirebaseToken();
Future.delayed(const Duration(seconds: 2)).whenComplete(() {
if (!isIncomingCall) { // Utils.showLoading(context);
if (isAppOpenBySystem!) checkFirebaseToken(); // Future.delayed(const Duration(seconds: 2)).whenComplete(() {
} // if (!isIncomingCall) {
}); // if (isAppOpenBySystem!) checkFirebaseToken();
// }
// });
} }
// username.text = "15444"; // username.text = "15444";
@ -412,7 +431,9 @@ class _LoginScreenState extends State<LoginScreen> with WidgetsBindingObserver {
children: [ children: [
Row( Row(
children: [ children: [
Expanded(child: SizedBox()), // Expanded(
// child:SizedBox(child: HmgConnectivityButton(),),
// ),
Row( Row(
children: [ children: [
LocaleKeys.english.tr().toText14(color: AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() { LocaleKeys.english.tr().toText14(color: AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() {

Loading…
Cancel
Save