SMS succesfully sent
This commit is contained in:
@@ -1,63 +1,239 @@
|
||||
// ignore_for_file: avoid_print
|
||||
import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:send_message/send_message.dart' show sendSMS;
|
||||
import 'package:simcards/sim_card.dart';
|
||||
import 'package:simcards/simcards.dart';
|
||||
// // ignore_for_file: avoid_print
|
||||
// import 'dart:io';
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:send_message/send_message.dart' show sendSMS;
|
||||
// import 'package:simcards/sim_card.dart';
|
||||
// import 'package:simcards/simcards.dart';
|
||||
|
||||
import 'package:uuid/uuid.dart';
|
||||
// import 'package:uuid/uuid.dart';
|
||||
|
||||
class SmsService {
|
||||
final Simcards _simcards = Simcards();
|
||||
// class SmsService {
|
||||
// final Simcards _simcards = Simcards();
|
||||
|
||||
Future<void> sendVerificationSms({
|
||||
required BuildContext context,
|
||||
required String destinationNumber,
|
||||
required String message,
|
||||
}) async {
|
||||
try {
|
||||
await _simcards.requestPermission();
|
||||
// Future<void> sendVerificationSms({
|
||||
// required BuildContext context,
|
||||
// required String destinationNumber,
|
||||
// required String message,
|
||||
// }) async {
|
||||
// try {
|
||||
// await _simcards.requestPermission();
|
||||
|
||||
bool permissionGranted = await _simcards.hasPermission();
|
||||
if (!permissionGranted) {
|
||||
print("Permission denied." );
|
||||
return;
|
||||
// bool permissionGranted = await _simcards.hasPermission();
|
||||
// if (!permissionGranted) {
|
||||
// print("Permission denied." );
|
||||
// return;
|
||||
// }
|
||||
|
||||
// List<SimCard> simCardList = await _simcards.getSimCards();
|
||||
// if (simCardList.isEmpty) {
|
||||
// print("No SIM detected." );
|
||||
// return;
|
||||
// }
|
||||
|
||||
// await _sendSms(destinationNumber, message, simCardList.first);
|
||||
|
||||
// } catch (e) {
|
||||
// print("Error in SMS process: $e");
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// Future<void> _sendSms(
|
||||
// String destinationNumber, String message, SimCard selectedSim) async {
|
||||
// if (Platform.isAndroid) {
|
||||
// try {
|
||||
// var uuid = const Uuid();
|
||||
// String uniqueId = uuid.v4();
|
||||
|
||||
// String smsMessage = uniqueId;
|
||||
// String result = await sendSMS(
|
||||
// message: smsMessage,
|
||||
// recipients: [destinationNumber],
|
||||
// sendDirect: false,
|
||||
// );
|
||||
// print("SMS send result: $result. Sent via ${selectedSim.displayName} (Note: OS default SIM isused).");
|
||||
|
||||
// } catch (e) {
|
||||
// print("Error sending SMS: $e");
|
||||
// }
|
||||
// } else {
|
||||
// print("SMS sending is only supported on Android.");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// import 'dart:io';
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:permission_handler/permission_handler.dart'; // Import permission_handler
|
||||
// import 'package:send_message/send_message.dart' show sendSMS;
|
||||
// import 'package:simcards/sim_card.dart';
|
||||
// import 'package:simcards/simcards.dart';
|
||||
|
||||
// class SmsService {
|
||||
// final Simcards _simcards = Simcards();
|
||||
|
||||
// Future<bool> sendVerificationSms({
|
||||
// required BuildContext context,
|
||||
// required String destinationNumber,
|
||||
// required String message,
|
||||
// }) async {
|
||||
// try {
|
||||
// // --- NEW PERMISSION LOGIC ---
|
||||
// // 1. Request both Phone and SMS permissions
|
||||
// Map<Permission, PermissionStatus> statuses = await [
|
||||
// Permission.phone,
|
||||
// Permission.sms,
|
||||
// ].request();
|
||||
|
||||
// // 2. Check if both permissions were granted
|
||||
// if (statuses[Permission.phone]!.isGranted && statuses[Permission.sms]!.isGranted) {
|
||||
// print("Phone and SMS permissions are granted.");
|
||||
// } else {
|
||||
// print("Permission was denied. Phone status: ${statuses[Permission.phone]}, SMS status: ${statuses[Permission.sms]}");
|
||||
// // Optionally, you can open app settings to let the user grant it manually
|
||||
// // openAppSettings();
|
||||
// return false;
|
||||
// }
|
||||
// // --- END OF NEW PERMISSION LOGIC ---
|
||||
|
||||
|
||||
// // Check for SIM card (this part remains the same)
|
||||
// List<SimCard> simCardList = await _simcards.getSimCards();
|
||||
// if (simCardList.isEmpty) {
|
||||
// print("No SIM card detected.");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// // Try sending the SMS and return the result
|
||||
// return await _sendSms(destinationNumber, message, simCardList.first);
|
||||
|
||||
// } catch (e) {
|
||||
// print("An error occurred in the SMS process: $e");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// Future<bool> _sendSms(
|
||||
// String destinationNumber, String message, SimCard selectedSim) async {
|
||||
// if (Platform.isAndroid) {
|
||||
// try {
|
||||
// String smsMessage = message;
|
||||
// String result = await sendSMS(
|
||||
// message: smsMessage,
|
||||
// recipients: [destinationNumber],
|
||||
// sendDirect: true, // Still attempting direct send as requested
|
||||
// );
|
||||
// print("Background SMS send attempt result: $result");
|
||||
|
||||
// if (result.toLowerCase().contains('sent')) {
|
||||
// print("Success: SMS appears to have been sent.");
|
||||
// return true;
|
||||
// } else {
|
||||
// print("Failure: SMS was not sent. Result: $result");
|
||||
// return false;
|
||||
// }
|
||||
// } catch (e) {
|
||||
// print("Error attempting to send SMS directly: $e");
|
||||
// return false;
|
||||
// }
|
||||
// } else {
|
||||
// print("SMS sending is only supported on Android.");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:send_message/send_message.dart' show sendSMS;
|
||||
import 'package:simcards/sim_card.dart';
|
||||
import 'package:simcards/simcards.dart';
|
||||
|
||||
// This enum provides detailed status back to the UI layer.
|
||||
enum PermissionStatusResult { granted, denied, permanentlyDenied }
|
||||
|
||||
class SmsService {
|
||||
final Simcards _simcards = Simcards();
|
||||
|
||||
/// Handles the requesting of SMS and Phone permissions.
|
||||
/// Returns a detailed status: granted, denied, or permanentlyDenied.
|
||||
Future<PermissionStatusResult> handleSmsPermission() async {
|
||||
var smsStatus = await Permission.sms.status;
|
||||
var phoneStatus = await Permission.phone.status;
|
||||
|
||||
// Check if permissions are already granted
|
||||
if (smsStatus.isGranted && phoneStatus.isGranted) {
|
||||
return PermissionStatusResult.granted;
|
||||
}
|
||||
|
||||
List<SimCard> simCardList = await _simcards.getSimCards();
|
||||
if (simCardList.isEmpty) {
|
||||
print("No SIM detected." );
|
||||
return;
|
||||
// Check if they have been permanently denied
|
||||
if (smsStatus.isPermanentlyDenied || phoneStatus.isPermanentlyDenied) {
|
||||
return PermissionStatusResult.permanentlyDenied;
|
||||
}
|
||||
|
||||
await _sendSms(destinationNumber, message, simCardList.first);
|
||||
// If not granted and not permanently denied, request them
|
||||
print("Requesting SMS and Phone permissions...");
|
||||
await [Permission.phone, Permission.sms].request();
|
||||
|
||||
} catch (e) {
|
||||
print("Error in SMS process: $e");
|
||||
// Re-check status after the request attempt
|
||||
smsStatus = await Permission.sms.status;
|
||||
phoneStatus = await Permission.phone.status;
|
||||
|
||||
if (smsStatus.isGranted && phoneStatus.isGranted) {
|
||||
return PermissionStatusResult.granted;
|
||||
} else {
|
||||
return PermissionStatusResult.denied;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Tries to send a single verification SMS.
|
||||
/// This should only be called AFTER permissions have been granted.
|
||||
Future<bool> sendVerificationSms({
|
||||
required BuildContext context,
|
||||
required String destinationNumber,
|
||||
required String message,
|
||||
}) async {
|
||||
try {
|
||||
List<SimCard> simCardList = await _simcards.getSimCards();
|
||||
if (simCardList.isEmpty) {
|
||||
print("No SIM card detected.");
|
||||
return false;
|
||||
}
|
||||
return await _sendSms(destinationNumber, message, simCardList.first);
|
||||
} catch (e) {
|
||||
print("An error occurred in the SMS process: $e");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _sendSms(
|
||||
/// Private function to perform the SMS sending action.
|
||||
Future<bool> _sendSms(
|
||||
String destinationNumber, String message, SimCard selectedSim) async {
|
||||
if (Platform.isAndroid) {
|
||||
try {
|
||||
var uuid = const Uuid();
|
||||
String uniqueId = uuid.v4();
|
||||
|
||||
String smsMessage = uniqueId;
|
||||
String smsMessage = message;
|
||||
String result = await sendSMS(
|
||||
message: smsMessage,
|
||||
recipients: [destinationNumber],
|
||||
sendDirect: true,
|
||||
sendDirect: true,
|
||||
);
|
||||
print("SMS send result: $result. Sent via ${selectedSim.displayName} (Note: OS default SIM isused).");
|
||||
print("Background SMS send attempt result: $result");
|
||||
|
||||
if (result.toLowerCase().contains('sent')) {
|
||||
print("Success: SMS appears to have been sent.");
|
||||
return true;
|
||||
} else {
|
||||
print("Failure: SMS was not sent. Result: $result");
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error sending SMS: $e");
|
||||
print("Error attempting to send SMS directly: $e");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
print("SMS sending is only supported on Android.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user