import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'package:e_surat_bendungan/config/api.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:mailer/mailer.dart'; import 'package:mailer/smtp_server.dart'; import 'package:http/http.dart' as http; class ControllerOtp extends GetxController { final TextEditingController controllerOtp = TextEditingController(); final Random random = Random(); var emailVerificationCode = 0.obs; var isLoading = false.obs; var isLoadingVerified = false.obs; var countdown = 60.obs; var isLoadingSendAgain = false.obs; var candSendEmail = false.obs; var errorMessage = ''.obs; int makeCodeOtp() { int otp = random.nextInt(9000) + 1000; // Pastikan angkanya memiliki 6 digit return emailVerificationCode.value = int.parse(otp.toString().padLeft(9, '0')); } void startTimer() { try { Timer.periodic(const Duration(seconds: 1), (Timer timer) { if (countdown.value == 0) { timer.cancel(); candSendEmail(true); } else { countdown.value--; } }); } catch (e) { print(e.toString()); } } Future sendEmail( BuildContext context, String email, String name) async { String username = 'antriquapps@gmail.com'; String password = 'kgts qgce vszl umkk'; final smtpServer = gmail(username, password); final message = Message() ..from = Address(username, 'eBendungan Apps') ..recipients.add(email) ..subject = 'KODE OTP VERIFICATION' ..html = emailTemplate(name, emailVerificationCode.toString()); isLoading(true); try { final sendReport = await send(message, smtpServer); print('Message sent: ' + sendReport.toString()); if (countdown.value == 0) { countdown.value = 60; candSendEmail(false); startTimer(); } } on SocketException { errorMessage.value = 'periksa koneksi internet anda'; } on MailerException catch (e) { print('Message not sent.'); print(e.message); errorMessage.value = e.message; for (var p in e.problems) { print('Problem: ${p.code}: ${p.msg}'); } } finally { isLoading(false); } } Future verifikasiUser({String? idUser}) async { isLoadingVerified(true); try { final response = await http.post(Uri.parse('${apiService}verified'), headers: {'Content-type': 'application/json'}, body: jsonEncode({'id_users': idUser})); final responseBody = json.decode(response.body); int code = responseBody['meta']['code']; if (code == 200) { errorMessage.value = ''; return true; } else { errorMessage.value = 'ada sesuatu yang error'; return false; } } catch (e) { errorMessage.value = 'error : $e'; return false; } finally { isLoadingVerified(false); } } String emailTemplate(String name, String kodeOtp) { return ''' OTP Verification
Kode OTP

Hey $name,

Terima kasih telah memilih eBendungan Apps. Gunakan OTP berikut untuk menyelesaikan pembuatan akun email Anda. Silakan kembali ke menu registrasi dan masukkan kode dibawah ini agar akun anda terverifikasi

$kodeOtp

Need help? Ask at ebendungan@gmail.com

'''; } @override void onInit() { // TODO: implement onInit super.onInit(); startTimer(); makeCodeOtp(); print(makeCodeOtp().toString()); } }