import 'package:encrypt/encrypt.dart' as encrypt; import 'package:flutter/foundation.dart'; import '../../constant/box_name.dart'; import '../../main.dart'; class EncryptionHelper { static EncryptionHelper? _instance; late final encrypt.Key key; late final encrypt.IV iv; EncryptionHelper._(this.key, this.iv); static EncryptionHelper get instance { if (_instance == null) { throw Exception( "EncryptionHelper is not initialized. Call `await EncryptionHelper.initialize()` in main."); } return _instance!; } /// Initializes and stores the instance globally static Future initialize() async { if (_instance != null) { debugPrint("EncryptionHelper is already initialized."); return; // Prevent re-initialization } debugPrint("Initializing EncryptionHelper..."); // Read stored keys String? keyOfApp = await storage.read(key: BoxName.keyOfApp); // Log.print('keyOfApp: ${keyOfApp}'); String? initializationVector = await storage.read(key: BoxName.initializationVector); // Log.print('initializationVector: ${initializationVector}'); // Set the global instance _instance = EncryptionHelper._( encrypt.Key.fromUtf8(keyOfApp!), encrypt.IV.fromUtf8(initializationVector!), ); debugPrint("EncryptionHelper initialized successfully."); } /// Encrypts a string String encryptData(String plainText) { try { final encrypter = encrypt.Encrypter(encrypt.AES(key, mode: encrypt.AESMode.cbc)); final encrypted = encrypter.encrypt(plainText, iv: iv); return encrypted.base64; } catch (e) { debugPrint('Encryption Error: $e'); return ''; } } /// Decrypts a string String decryptData(String encryptedText) { try { final encrypter = encrypt.Encrypter(encrypt.AES(key, mode: encrypt.AESMode.cbc)); final encrypted = encrypt.Encrypted.fromBase64(encryptedText); return encrypter.decrypt(encrypted, iv: iv); } catch (e) { debugPrint('Decryption Error: $e'); return ''; } } }