137 lines
4.8 KiB
Dart
137 lines
4.8 KiB
Dart
import 'package:get/get.dart';
|
|
import 'package:sefer_driver/controller/auth/captin/login_captin_controller.dart';
|
|
import 'package:sefer_driver/controller/functions/crud.dart';
|
|
import 'package:sefer_driver/print.dart';
|
|
import 'package:sefer_driver/views/home/on_boarding_page.dart';
|
|
import 'package:sefer_driver/views/widgets/error_snakbar.dart';
|
|
|
|
import '../../../constant/box_name.dart';
|
|
import '../../../constant/links.dart';
|
|
import '../../../main.dart';
|
|
import '../../../views/auth/syria/registration_view.dart';
|
|
|
|
// --- Helper Class for Phone Authentication ---
|
|
|
|
class PhoneAuthHelper {
|
|
// Define your server URLs
|
|
static final String _baseUrl = '${AppLink.server}/auth/syria/driver/';
|
|
static final String _sendOtpUrl = '${_baseUrl}sendWhatsAppDriver.php';
|
|
static final String _verifyOtpUrl = '${_baseUrl}verifyOtp.php';
|
|
static final String _registerUrl = '${_baseUrl}register_driver.php';
|
|
|
|
/// Sends an OTP to the provided phone number.
|
|
static Future<bool> sendOtp(String phoneNumber) async {
|
|
try {
|
|
final response = await CRUD().post(
|
|
link: _sendOtpUrl,
|
|
payload: {'receiver': phoneNumber},
|
|
);
|
|
if (response != 'failure') {
|
|
final data = (response);
|
|
Log.print('data: ${data}');
|
|
// if (data['status'] == 'success') {
|
|
mySnackbarSuccess('An OTP has been sent to your WhatsApp number.'.tr);
|
|
return true;
|
|
// } else {
|
|
// mySnackeBarError(data['message'] ?? 'Failed to send OTP.');
|
|
// return false;
|
|
// }
|
|
} else {
|
|
mySnackeBarError('Server error. Please try again.'.tr);
|
|
return false;
|
|
}
|
|
} catch (e) {
|
|
// mySnackeBarError('An error occurred: $e');
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// Verifies the OTP and logs the user in.
|
|
static Future<void> verifyOtp(String phoneNumber, String otp) async {
|
|
try {
|
|
final response = await CRUD().post(
|
|
link: _verifyOtpUrl,
|
|
payload: {'phone_number': phoneNumber, 'otp': otp},
|
|
);
|
|
|
|
if (response != 'failure') {
|
|
final data = response;
|
|
|
|
if (data['status'] == 'success') {
|
|
final isRegistered = data['message']['isRegistered'] ?? false;
|
|
box.write(BoxName.phoneVerified, true);
|
|
box.write(BoxName.phoneDriver, phoneNumber);
|
|
box.write(BoxName.driverID, data['message']['driverID']);
|
|
|
|
if (isRegistered) {
|
|
// ✅ السائق مسجل مسبقًا - سجل دخوله واذهب إلى الصفحة الرئيسية
|
|
final driver = data['message']['driver'];
|
|
// mySnackbarSuccess('Welcome back, ${driver['first_name']}!');
|
|
|
|
// حفظ بيانات السائق إذا أردت:
|
|
box.write(BoxName.driverID, driver['id']);
|
|
box.write(BoxName.emailDriver, driver['email']);
|
|
|
|
await Get.find<LoginDriverController>().loginWithGoogleCredential(
|
|
driver['id'].toString(), driver['email'].toString());
|
|
} else {
|
|
// ✅ رقم الهاتف تم التحقق منه لكن السائق غير مسجل
|
|
// mySnackbarSuccess('Phone verified. Please complete registration.');
|
|
// Get.offAll(() => SyrianCardAI());
|
|
Get.offAll(() => RegistrationView());
|
|
}
|
|
} else {
|
|
mySnackeBarError(data['message'] ?? 'Verification failed.');
|
|
}
|
|
} else {
|
|
mySnackeBarError('Server error. Please try again.');
|
|
}
|
|
} catch (e) {
|
|
mySnackeBarError('An error occurred: $e');
|
|
}
|
|
}
|
|
|
|
static Future<void> registerUser({
|
|
required String phoneNumber,
|
|
required String firstName,
|
|
required String lastName,
|
|
String? email,
|
|
}) async {
|
|
try {
|
|
final response = await CRUD().post(
|
|
link: _registerUrl,
|
|
payload: {
|
|
'phone_number': phoneNumber,
|
|
'first_name': firstName,
|
|
'last_name': lastName,
|
|
'email': email ?? '', // Send empty string if null
|
|
},
|
|
);
|
|
final data = (response);
|
|
if (data != 'failure') {
|
|
// Registration successful, log user in
|
|
await _handleSuccessfulLogin(data['message']);
|
|
} else {
|
|
mySnackeBarError(
|
|
"User with this phone number or email already exists.".tr);
|
|
}
|
|
} catch (e) {
|
|
mySnackeBarError('An error occurred: $e');
|
|
}
|
|
}
|
|
|
|
static Future<void> _handleSuccessfulLogin(
|
|
Map<String, dynamic> userData) async {
|
|
mySnackbarSuccess('Welcome, ${userData['first_name']}!');
|
|
|
|
// Save user data to local storage (Hive box) using new keys
|
|
box.write(BoxName.passengerID, userData['id']);
|
|
box.write(BoxName.nameDriver, userData['first_name']);
|
|
box.write(BoxName.lastNameDriver, userData['last_name']);
|
|
box.write(BoxName.emailDriver, userData['email']);
|
|
box.write(BoxName.phoneDriver, userData['phone']);
|
|
|
|
Get.offAll(() => OnBoardingPage()); // Navigate to home
|
|
}
|
|
}
|