import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import '../features/call/call_page.dart'; class CallService { static const MethodChannel _channel = MethodChannel('call_service'); static String? currentPhoneNumber; CallService() { _channel.setMethodCallHandler((call) async { if (call.method == "callStateChanged") { final state = call.arguments["state"] as String; final phoneNumber = call.arguments["phoneNumber"] as String; if (state == "dialing" || state == "active") { Navigator.push( navigatorKey.currentContext!, MaterialPageRoute( builder: (context) => CallPage( displayName: phoneNumber, // Replace with contact lookup if available phoneNumber: phoneNumber, thumbnail: null, ), ), ); } else if (state == "disconnected") { Navigator.pop(navigatorKey.currentContext!); } } }); } // Add a GlobalKey for Navigator static final GlobalKey navigatorKey = GlobalKey(); Future makeGsmCall( BuildContext context, { required String phoneNumber, String? displayName, Uint8List? thumbnail, }) async { try { currentPhoneNumber = phoneNumber; final result = await _channel.invokeMethod('makeGsmCall', {"phoneNumber": phoneNumber}); if (result["status"] == "calling") { // CallPage will be shown via CallConnectionService callback } else if (result["status"] == "pending_default_dialer") { print("Waiting for user to set app as default dialer"); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text("Please set this app as your default dialer to proceed")), ); } } catch (e) { print("Error making call: $e"); rethrow; } } Future hangUpCall(BuildContext context) async { try { final result = await _channel.invokeMethod('hangUpCall'); if (result["status"] == "ended") { Navigator.pop(context); } } catch (e) { print("Error hanging up call: $e"); rethrow; } } }