Changes On iOS

merge-requests/188/head
Aamir Muhammad 2 years ago
parent 8db09f20b7
commit aed4a9602b

@ -77,6 +77,7 @@ class ChatVoipCall {
"callerDetails": callerData.toJson(), "callerDetails": callerData.toJson(),
'isIncomingCall': true, 'isIncomingCall': true,
'isUserOnline': isUserOnline, 'isUserOnline': isUserOnline,
'callType' : data!.data["callType"]
}, },
android: const AndroidParams( android: const AndroidParams(
isCustomNotification: true, isCustomNotification: true,
@ -178,7 +179,8 @@ class ChatVoipCall {
} }
Future<void> declineCall() async { Future<void> declineCall() async {
if (isUserOnline) { if (isUserOnline && chatHubConnection != null) {
print("Connection State ===" + chatHubConnection.state.toString());
if (chatHubConnection.state == HubConnectionState.Connected) { if (chatHubConnection.state == HubConnectionState.Connected) {
if (sessionData?.extra != null) { if (sessionData?.extra != null) {
chatHubConnection.invoke("HangUpAsync", args: [ chatHubConnection.invoke("HangUpAsync", args: [
@ -207,7 +209,11 @@ class ChatVoipCall {
], ],
); );
FlutterCallkitIncoming.endCall(sessionData.id!); FlutterCallkitIncoming.endCall(sessionData.id!);
hc.stop(); if (!isUserOnline) {
hc.stop();
} else {
chatHubConnection = hc;
}
} }
} }
} }

@ -10,7 +10,7 @@ void setupLocator() {
} }
class NavigationService { class NavigationService {
final GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>(); final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
static Future<dynamic> navigateTo(String routeName) { static Future<dynamic> navigateTo(String routeName) {
var key = locator<NavigationService>().navigatorKey; var key = locator<NavigationService>().navigatorKey;

@ -114,12 +114,14 @@ class AppNotifications {
} }
void _handleMessage(RemoteMessage message) { void _handleMessage(RemoteMessage message) {
print("res: --------------"); print("res: ------handle message--------");
logger.w(message);
Utils.saveStringFromPrefs("isAppOpendByChat", "false"); Utils.saveStringFromPrefs("isAppOpendByChat", "false");
if (message.data.isNotEmpty && message.data["messageType"] == 'chat') { if (message.data.isNotEmpty && message.data["messageType"] == 'chat') {
Utils.saveStringFromPrefs("isAppOpendByChat", "true"); Utils.saveStringFromPrefs("isAppOpendByChat", "true");
Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
} else if (message.data.isNotEmpty && message.data["messageType"] == 'call') { } else if (message.data.isNotEmpty && message.data["messageType"] == 'call') {
logger.d(message.data);
ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message); ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message);
} }
} }
@ -133,18 +135,17 @@ class AppNotifications {
} }
} }
AndroidNotificationChannel channel = const AndroidNotificationChannel(
"high_importance_channel",
"High Importance Notifications",
importance: Importance.high,
);
Future<dynamic> backgroundMessageHandler(RemoteMessage message) async { Future<dynamic> backgroundMessageHandler(RemoteMessage message) async {
await Firebase.initializeApp();
//await Firebase.initializeApp();
print("res: ------background message--------");
logger.w(message);
if (message.data.isNotEmpty && message.data["messageType"] == 'chat') { if (message.data.isNotEmpty && message.data["messageType"] == 'chat') {
Utils.saveStringFromPrefs("isAppOpendByChat", "false"); Utils.saveStringFromPrefs("isAppOpendByChat", "false");
Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
} else if (message.data.isNotEmpty && message.data["messageType"] == 'call') { } else if (message.data.isNotEmpty && message.data["messageType"] == 'call') {
logger.d(message.data);
ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message, background: true); ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message, background: true);
} }
} }

@ -20,9 +20,11 @@ import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:month_year_picker/month_year_picker.dart'; import 'package:month_year_picker/month_year_picker.dart';
import 'package:provider/provider.dart'; 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:sizer/sizer.dart'; import 'package:sizer/sizer.dart';
final GetIt locator = GetIt.instance; final GetIt locator = GetIt.instance;
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)
printer: PrettyPrinter( printer: PrettyPrinter(

@ -140,11 +140,13 @@ class Extra {
LoginDetails? loginDetails; LoginDetails? loginDetails;
bool? isIncomingCall; bool? isIncomingCall;
CallerDetails? callerDetails; CallerDetails? callerDetails;
String? callType;
Extra({ Extra({
this.loginDetails, this.loginDetails,
this.isIncomingCall, this.isIncomingCall,
this.callerDetails, this.callerDetails,
this.callType,
}); });
factory Extra.fromRawJson(String str) => Extra.fromJson(json.decode(str)); factory Extra.fromRawJson(String str) => Extra.fromJson(json.decode(str));
@ -154,12 +156,14 @@ class Extra {
factory Extra.fromJson(Map<String, dynamic> json) => Extra( factory Extra.fromJson(Map<String, dynamic> json) => Extra(
loginDetails: json["loginDetails"] == null ? null : LoginDetails.fromJson(json["loginDetails"]), loginDetails: json["loginDetails"] == null ? null : LoginDetails.fromJson(json["loginDetails"]),
isIncomingCall: json["isIncomingCall"], isIncomingCall: json["isIncomingCall"],
callType: json["callType"],
callerDetails: json["callerDetails"] == null ? null : CallerDetails.fromJson(json["callerDetails"]), callerDetails: json["callerDetails"] == null ? null : CallerDetails.fromJson(json["callerDetails"]),
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"loginDetails": loginDetails?.toJson(), "loginDetails": loginDetails?.toJson(),
"isIncomingCall": isIncomingCall, "isIncomingCall": isIncomingCall,
"callType": callType,
"callerDetails": callerDetails?.toJson(), "callerDetails": callerDetails?.toJson(),
}; };
} }

@ -14,7 +14,6 @@ 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 {
@ -210,10 +209,13 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
isLoudSpeaker = false; isLoudSpeaker = false;
isIncomingCall = false; isIncomingCall = false;
isOutGoingCall = false; isOutGoingCall = false;
if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { isAudioCall = false;
print("------------------ PC Stopped ----------------------------"); if (isCallConnected) {
_pc.close(); if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) {
_pc.dispose(); print("------------------ PC Stopped ----------------------------");
_pc.close();
_pc.dispose();
}
} }
remoteRenderer!.dispose(); remoteRenderer!.dispose();
localVideoRenderer!.dispose(); localVideoRenderer!.dispose();
@ -240,10 +242,11 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
isCamOff = false; isCamOff = false;
isMicOff = false; isMicOff = false;
isLoudSpeaker = false; isLoudSpeaker = false;
if (isCallConnected) {
if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) {
_pc.close(); _pc.close();
_pc.dispose(); _pc.dispose();
}
} }
remoteRenderer!.dispose(); remoteRenderer!.dispose();
localVideoRenderer!.dispose(); localVideoRenderer!.dispose();
@ -255,6 +258,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
} }
isOutGoingCall = false; isOutGoingCall = false;
isIncomingCall = false; isIncomingCall = false;
isAudioCall = false;
// await initStreams().whenComplete(() => notifyListeners()); // await initStreams().whenComplete(() => notifyListeners());
return true; return true;
} }
@ -569,18 +573,24 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
Future<void> startIncomingCallViaKit({bool isVCall = true, required var inCallData}) async { Future<void> startIncomingCallViaKit({bool isVCall = true, required var inCallData}) async {
Utils.saveStringFromPrefs("isIncomingCall", "false"); Utils.saveStringFromPrefs("isIncomingCall", "false");
isVideoCall = isVCall; if(isVCall) {
isVideoCall = isVCall;
}else{
isAudioCall = true;
}
await initStreams(); await initStreams();
isIncomingCall = true; isIncomingCall = true;
incomingCallData = SingleUserChatModel.fromJson(inCallData); incomingCallData = SingleUserChatModel.fromJson(inCallData);
loudOn(); loudOn();
// notifyListeners();
} }
void connectIncomingCall() { void connectIncomingCall() {
invoke(invokeMethod: "answerCallAsync", currentUserID: AppState().getchatUserDetails!.response!.id!, targetUserID: incomingCallData.targetUserId!); invoke(invokeMethod: "answerCallAsync", currentUserID: AppState().getchatUserDetails!.response!.id!, targetUserID: incomingCallData.targetUserId!);
isIncomingCallLoader = false; isIncomingCallLoader = false;
isIncomingCall = true; isIncomingCall = true;
isVideoCall = true; // isVideoCall = true;
notifyListeners(); notifyListeners();
} }
} }

@ -422,7 +422,9 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
); );
} }
} }
setMsgTune(); if (data.first.chatEventId != 3) {
setMsgTune();
}
if (isChatScreenActive && data.first.currentUserId == receiverID) { if (isChatScreenActive && data.first.currentUserId == receiverID) {
userChatHistory.insert(0, data.first); userChatHistory.insert(0, data.first);
} else { } else {

@ -17,6 +17,8 @@ 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:provider/provider.dart'; import 'package:provider/provider.dart';
bool isCallConnected = false;
class StartCallPage extends StatefulWidget { class StartCallPage extends StatefulWidget {
@override @override
_StartCallPageState createState() => _StartCallPageState(); _StartCallPageState createState() => _StartCallPageState();
@ -39,12 +41,6 @@ class _StartCallPageState extends State<StartCallPage> {
super.dispose(); super.dispose();
} }
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
}
void startCall() async { void startCall() async {
IncomingCallModel? sessionData; IncomingCallModel? sessionData;
dynamic calls = await FlutterCallkitIncoming.activeCalls(); dynamic calls = await FlutterCallkitIncoming.activeCalls();
@ -59,18 +55,20 @@ class _StartCallPageState extends State<StartCallPage> {
print("====== Processing Incoming Call in Online State ========="); print("====== Processing Incoming Call in Online State =========");
} }
await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson()); await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData.extra!.callType == "video" ? true : false);
cProv.init(); cProv.init();
isCallConnected = true;
} else { } else {
if (kDebugMode) { if (kDebugMode) {
print("====== Processing Incoming Call ========="); print("====== Processing Incoming Call =========");
} }
cProv.isUserOnline = provider.isUserOnline; cProv.isUserOnline = provider.isUserOnline;
await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson()); await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData.extra!.callType == "video" ? true : false);
try { try {
AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null); AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null);
await provider.buildHubConnection(context: context, ccProvider: cProv).whenComplete(() { await provider.buildHubConnection(context: context, ccProvider: cProv).whenComplete(() {
cProv.init(); cProv.init();
isCallConnected = true;
}); });
} catch (e) { } catch (e) {
logger.w(e); logger.w(e);
@ -211,7 +209,7 @@ class _StartCallPageState extends State<StartCallPage> {
), ),
10.height, 10.height,
Text( Text(
provider.outGoingCallData.receiverName!, provider.incomingCallData.targetUserName!,
style: const TextStyle( style: const TextStyle(
fontSize: 21, fontSize: 21,
decoration: TextDecoration.none, decoration: TextDecoration.none,

@ -7,6 +7,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.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/chat/chat_home_screen.dart'; import 'package:mohem_flutter_app/ui/chat/chat_home_screen.dart';

@ -16,6 +16,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.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/provider/chat_call_provider.dart'; import 'package:mohem_flutter_app/provider/chat_call_provider.dart';
@ -34,7 +35,7 @@ import 'package:provider/provider.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:signalr_netcore/signalr_client.dart'; import 'package:signalr_netcore/signalr_client.dart';
late HubConnection chatHubConnection;
class DashboardScreen extends StatefulWidget { class DashboardScreen extends StatefulWidget {
DashboardScreen({Key? key}) : super(key: key); DashboardScreen({Key? key}) : super(key: key);

Loading…
Cancel
Save