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

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

@ -114,12 +114,14 @@ class AppNotifications {
}
void _handleMessage(RemoteMessage message) {
print("res: --------------");
print("res: ------handle message--------");
logger.w(message);
Utils.saveStringFromPrefs("isAppOpendByChat", "false");
if (message.data.isNotEmpty && message.data["messageType"] == 'chat') {
Utils.saveStringFromPrefs("isAppOpendByChat", "true");
Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
} else if (message.data.isNotEmpty && message.data["messageType"] == 'call') {
logger.d(message.data);
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 {
await Firebase.initializeApp();
//await Firebase.initializeApp();
print("res: ------background message--------");
logger.w(message);
if (message.data.isNotEmpty && message.data["messageType"] == 'chat') {
Utils.saveStringFromPrefs("isAppOpendByChat", "false");
Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString());
} else if (message.data.isNotEmpty && message.data["messageType"] == 'call') {
logger.d(message.data);
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:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:signalr_netcore/hub_connection.dart';
import 'package:sizer/sizer.dart';
final GetIt locator = GetIt.instance;
late HubConnection chatHubConnection;
Logger logger = Logger(
// filter: null, // Use the default LogFilter (-> only log in debug mode)
printer: PrettyPrinter(

@ -140,11 +140,13 @@ class Extra {
LoginDetails? loginDetails;
bool? isIncomingCall;
CallerDetails? callerDetails;
String? callType;
Extra({
this.loginDetails,
this.isIncomingCall,
this.callerDetails,
this.callType,
});
factory Extra.fromRawJson(String str) => Extra.fromJson(json.decode(str));
@ -154,12 +156,14 @@ class Extra {
factory Extra.fromJson(Map<String, dynamic> json) => Extra(
loginDetails: json["loginDetails"] == null ? null : LoginDetails.fromJson(json["loginDetails"]),
isIncomingCall: json["isIncomingCall"],
callType: json["callType"],
callerDetails: json["callerDetails"] == null ? null : CallerDetails.fromJson(json["callerDetails"]),
);
Map<String, dynamic> toJson() => {
"loginDetails": loginDetails?.toJson(),
"isIncomingCall": isIncomingCall,
"callType": callType,
"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/provider/chat_provider_model.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';
class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
@ -210,11 +209,14 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
isLoudSpeaker = false;
isIncomingCall = false;
isOutGoingCall = false;
isAudioCall = false;
if (isCallConnected) {
if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) {
print("------------------ PC Stopped ----------------------------");
_pc.close();
_pc.dispose();
}
}
remoteRenderer!.dispose();
localVideoRenderer!.dispose();
localVideoRenderer = null;
@ -240,11 +242,12 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
isCamOff = false;
isMicOff = false;
isLoudSpeaker = false;
if (isCallConnected) {
if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) {
_pc.close();
_pc.dispose();
}
}
remoteRenderer!.dispose();
localVideoRenderer!.dispose();
localVideoRenderer = null;
@ -255,6 +258,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
}
isOutGoingCall = false;
isIncomingCall = false;
isAudioCall = false;
// await initStreams().whenComplete(() => notifyListeners());
return true;
}
@ -569,18 +573,24 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin {
Future<void> startIncomingCallViaKit({bool isVCall = true, required var inCallData}) async {
Utils.saveStringFromPrefs("isIncomingCall", "false");
if(isVCall) {
isVideoCall = isVCall;
}else{
isAudioCall = true;
}
await initStreams();
isIncomingCall = true;
incomingCallData = SingleUserChatModel.fromJson(inCallData);
loudOn();
// notifyListeners();
}
void connectIncomingCall() {
invoke(invokeMethod: "answerCallAsync", currentUserID: AppState().getchatUserDetails!.response!.id!, targetUserID: incomingCallData.targetUserId!);
isIncomingCallLoader = false;
isIncomingCall = true;
isVideoCall = true;
// isVideoCall = true;
notifyListeners();
}
}

@ -422,7 +422,9 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
);
}
}
if (data.first.chatEventId != 3) {
setMsgTune();
}
if (isChatScreenActive && data.first.currentUserId == receiverID) {
userChatHistory.insert(0, data.first);
} 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:provider/provider.dart';
bool isCallConnected = false;
class StartCallPage extends StatefulWidget {
@override
_StartCallPageState createState() => _StartCallPageState();
@ -39,12 +41,6 @@ class _StartCallPageState extends State<StartCallPage> {
super.dispose();
}
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
}
void startCall() async {
IncomingCallModel? sessionData;
dynamic calls = await FlutterCallkitIncoming.activeCalls();
@ -59,18 +55,20 @@ class _StartCallPageState extends State<StartCallPage> {
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();
isCallConnected = true;
} else {
if (kDebugMode) {
print("====== Processing Incoming Call =========");
}
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 {
AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null);
await provider.buildHubConnection(context: context, ccProvider: cProv).whenComplete(() {
cProv.init();
isCallConnected = true;
});
} catch (e) {
logger.w(e);
@ -211,7 +209,7 @@ class _StartCallPageState extends State<StartCallPage> {
),
10.height,
Text(
provider.outGoingCallData.receiverName!,
provider.incomingCallData.targetUserName!,
style: const TextStyle(
fontSize: 21,
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/widget_extensions.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_provider_model.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/widget_extensions.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/privilege_list_model.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:signalr_netcore/signalr_client.dart';
late HubConnection chatHubConnection;
class DashboardScreen extends StatefulWidget {
DashboardScreen({Key? key}) : super(key: key);

Loading…
Cancel
Save