import 'dart:async'; import 'dart:convert'; import 'dart:math'; import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/views/home/map_page_passenger.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/links.dart'; import 'package:SEFER/constant/style.dart'; import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/views/auth/login_page.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; import '../../views/auth/verify_email_page.dart'; import '../functions/sms_controller.dart'; class RegisterController extends GetxController { final formKey = GlobalKey(); final formKey3 = GlobalKey(); TextEditingController firstNameController = TextEditingController(); TextEditingController lastNameController = TextEditingController(); TextEditingController emailController = TextEditingController(); TextEditingController phoneController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController siteController = TextEditingController(); TextEditingController verfyCode = TextEditingController(); TextEditingController verifyCode = TextEditingController(); int remainingTime = 300; // 5 minutes in seconds bool isSent = false; bool isLoading = false; Timer? _timer; String birthDate = 'Birth Date'.tr; String gender = 'Male'.tr; @override void onInit() { super.onInit(); } void startTimer() { _timer?.cancel(); // Cancel any existing timer _timer = Timer.periodic(const Duration(seconds: 1), (timer) { if (remainingTime > 0) { remainingTime--; } else { timer.cancel(); } }); } getBirthDate() { Get.defaultDialog( title: 'Select Date'.tr, titleStyle: AppStyle.title, content: SizedBox( width: 300, child: CalendarDatePicker( initialDate: DateTime.now().subtract(const Duration(days: 14 * 365)), firstDate: DateTime.parse('1940-06-01'), lastDate: DateTime.now().subtract(const Duration(days: 14 * 365)), onDateChanged: (date) { // Get the selected date and convert it to a DateTime object DateTime dateTime = date; // Call the getOrders() function from the controller birthDate = dateTime.toString().split(' ')[0]; update(); }, // onDateChanged: (DateTime value) {}, ), ), confirm: MyElevatedButton(title: 'Ok'.tr, onPressed: () => Get.back())); } void changeGender(String value) { gender = value; update(); } sendOtpMessage() async { SmsEgyptController smsEgyptController = Get.put(SmsEgyptController()); int randomNumber = Random().nextInt(100000) + 1; isLoading = true; update(); if (formKey3.currentState!.validate()) { if (box.read(BoxName.countryCode) == 'Egypt') { var responseCheker = await CRUD() .post(link: AppLink.checkPhoneNumberISVerfiedPassenger, payload: { 'phone_number': '+2${phoneController.text}', }); // if (responseCheker != 'failure') { var d = jsonDecode(responseCheker); if (d['message'][0]['verified'].toString() == '1') { Get.snackbar('Phone number is verified before'.tr, '', backgroundColor: AppColor.greenColor); box.write(BoxName.isVerified, '1'); box.write(BoxName.phone, '+2${phoneController.text}'); Get.offAll(const MapPagePassenger()); // } } else { await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: { 'phone_number': '+2${phoneController.text}', 'token': randomNumber.toString(), }); await smsEgyptController.sendSmsEgypt( phoneController.text.toString(), randomNumber.toString()); isSent = true; remainingTime = 300; // Reset to 5 minutes startTimer(); isLoading = false; update(); } } } } verifySMSCode() async { if (formKey3.currentState!.validate()) { var res = await CRUD().post(link: AppLink.verifyOtpMessage, payload: { 'phone_number': '+2${phoneController.text}', 'token': verifyCode.text.toString(), }); if (res != 'failure') { // var dec = jsonDecode(res); box.write(BoxName.phoneDriver, '+2${phoneController.text}'); var payload = { 'id': box.read(BoxName.passengerID), 'phone': '+2${phoneController.text}', 'email': box.read(BoxName.email), 'password': 'unknown', 'gender': 'unknown', 'birthdate': '2002-01-01', 'site': 'unknown', 'first_name': box.read(BoxName.name).toString().split(' ')[0], 'last_name': box.read(BoxName.name).toString().split(' ')[1], }; var res1 = await CRUD().post( link: AppLink.signUp, payload: payload, ); if (res1 != 'failure') { box.write(BoxName.isVerified, '1'); box.write(BoxName.phone, '+2${phoneController.text}'); Get.offAll(const MapPagePassenger()); } } else { Get.snackbar('Error'.tr, '', backgroundColor: Colors.redAccent); } } } sendVerifications() async { var res = await CRUD().post(link: AppLink.verifyEmail, payload: { 'email': emailController.text, 'token': verfyCode.text, }); var dec = jsonDecode(res); if (dec['status'] == 'success') { Get.offAll(() => LoginPage()); } } void register() async { if (formKey.currentState!.validate()) { var res = await CRUD().post(link: AppLink.signUp, payload: { 'first_name': firstNameController.text.toString(), 'last_name': lastNameController.text.toString(), 'email': emailController.text.toString(), 'phone': phoneController.text.toString(), 'password': passwordController.text.toString(), 'gender': 'yet', 'site': siteController.text, 'birthdate': birthDate, }); if (jsonDecode(res)['status'] == 'success') { int randomNumber = Random().nextInt(100000) + 1; await CRUD().post(link: AppLink.sendVerifyEmail, payload: { 'email': emailController.text, 'token': randomNumber.toString(), }); Get.to(() => const VerifyEmailPage()); } } } @override void onClose() { _timer?.cancel(); super.onClose(); } }