home,signin,login view and ol logik

This commit is contained in:
2026-09-30 20:31:01 +02:00
parent 63d03baac9
commit df71b15ff9
27 changed files with 1654 additions and 127 deletions
+45
View File
@@ -0,0 +1,45 @@
import 'package:get/get.dart';
import '../models/filament_model.dart';
import '../pages/login_view.dart';
import '../services/directus_service.dart';
class HomeController extends GetxController {
final identId = Get.arguments['userIdentId'] as String? ?? '';
final directusService = DirectusService();
final isLoading = false.obs;
final filamentModelList = <FilamentModel>[].obs;
@override
void onReady() {
loadFilamentListPerUser();
}
@override
void onClose() {}
void logout() {
Get.offAllNamed(LoginPage.namedRoute);
}
void addFilament() {}
Future<void> loadFilamentListPerUser() async {
isLoading.value = true;
if (filamentModelList.isNotEmpty) {
filamentModelList.clear();
}
if (identId != '') {
var resultList = await directusService.getListByUserId(identId);
if (resultList.isEmpty) {
print('Dokumente wurden nicht geladen: ${resultList.length}');
} else {
print('Filament List: $resultList');
filamentModelList.addAll(
resultList.map((json) => FilamentModel.fromJson(json)).toList(),
);
}
}
isLoading.value = false;
update();
}
}
+90
View File
@@ -0,0 +1,90 @@
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': ''});
}
}
+91
View File
@@ -0,0 +1,91 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../pages/home_view.dart';
import '../pages/login_view.dart';
import '../services/directus_service.dart';
class SigninController extends GetxController {
final userNameController = TextEditingController();
final emailController = TextEditingController();
final passwordController = TextEditingController();
final cityController = TextEditingController();
final countryController = TextEditingController();
final directusService = DirectusService();
@override
void onReady() {}
@override
void onClose() {
userNameController.dispose();
emailController.dispose();
passwordController.dispose();
cityController.dispose();
countryController.dispose();
super.onClose();
}
void register() async {
// Eingaben überprüfen
if (!_checkInputs()) return;
// Registrierungslogik
var userName = userNameController.text.trim();
var email = emailController.text.trim().toLowerCase();
var password = passwordController.text;
var city = cityController.text.trim();
var country = countryController.text.trim();
print(
'Registrieren mit Benutzername: $userName, E-Mail: $email, Stadt: $city, Land: $country',
);
bool registrationSuccess = await directusService.register(userName, email, password, city, country);
if (registrationSuccess) {
Get.snackbar(
'Registrierung erfolgreich',
'Willkommen, $userName!',
snackPosition: SnackPosition.BOTTOM,
);
var userIdentId = base64Encode(utf8.encode('$email:$password'));
Get.offAllNamed(HomePage.namedRoute, arguments: {'userIdentId': userIdentId});
} else {
Get.snackbar(
'Registrierung fehlgeschlagen',
'Bitte überprüfen Sie Ihre Eingaben und versuchen Sie es erneut.',
snackPosition: SnackPosition.BOTTOM,
);
}
}
void goToLoginPage() {
FocusManager.instance.primaryFocus?.unfocus();
Get.offAllNamed(LoginPage.namedRoute);
}
bool _checkInputs() {
if (userNameController.text.trim().isEmpty ||
emailController.text.trim().isEmpty ||
passwordController.text.isEmpty) {
Get.snackbar(
'Fehler',
'Bitte alle erforderlichen Felder ausfüllen',
snackPosition: SnackPosition.BOTTOM,
);
return false;
}
if (passwordController.text.length < 6) {
Get.snackbar(
'Fehler',
'Passwort muss mindestens 6 Zeichen lang sein',
snackPosition: SnackPosition.BOTTOM,
);
return false;
}
return true;
}
}