import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../helper/helper.dart' as helper; import '../models/tank_user_model.dart'; import '../pages/home_view.dart'; import '../pages/signin_view.dart'; import '../services/directus_service.dart'; import '../helper/password_helper.dart'; class LoginController extends GetxController { final emailController = TextEditingController(); final passwordController = TextEditingController(); final directusService = DirectusService(); @override void onReady() {} @override void onClose() { emailController.dispose(); passwordController.dispose(); } void newLoginDirectus() async { var email = emailController.text.trim().toLowerCase(); var password = passwordController.text; var result = await directusService.getTankUserList(); if (result.isEmpty) { Get.snackbar( 'Login fehlgeschlagen', 'Fehler beim Abrufen der Benutzerdaten. Bitte versuchen Sie es später erneut.', snackPosition: SnackPosition.BOTTOM, ); return; } var tankUserList = result .map((userJson) => TankUser.fromJson(userJson)) .toList(); var identId = tankUserList .firstWhereOrNull((user) => user.email == email) ?.userIdentId ?? ''; if (identId.isEmpty) { Get.snackbar( 'Login fehlgeschlagen', 'Benutzer mit dieser E-Mail-Adresse wurde nicht gefunden.', snackPosition: SnackPosition.BOTTOM, ); return; } var storedHash = tankUserList .firstWhereOrNull((user) => user.email == email) ?.passwordHash ?? ''; if (storedHash.isEmpty) { Get.snackbar( 'Login fehlgeschlagen', 'Kein gespeicherter Passwort-Hash für diesen Benutzer gefunden.', snackPosition: SnackPosition.BOTTOM, ); return; } var isPassCorrect = await PasswordHelper.verifyPassword( password, storedHash, ); if (isPassCorrect && identId.isNotEmpty) { Get.snackbar( 'Login erfolgreich', 'Willkommen zurück!', snackPosition: SnackPosition.BOTTOM, ); print('Login erfolgreich für Benutzer mit IdentId: $identId'); helper.kCurrentUserIdentId = identId; // Set the current user identId Get.offAllNamed(HomePage.namedRoute, arguments: {'userIdentId': identId}); } else { Get.snackbar( 'Login fehlgeschlagen', 'Bitte überprüfen Sie Ihre E-Mail und Ihr Passwort und versuchen Sie es erneut\noder registrieren Sie sich, wenn Sie noch kein Konto haben.', snackPosition: SnackPosition.BOTTOM, ); } } void goToSignInPage() { Get.offAllNamed(SigninPage.namedRoute, arguments: {'userIdentId': ''}); } }