import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:groceries_manager/db/database.dart'; import 'package:groceries_manager/services/db_service.dart'; import 'package:groceries_manager/services/toaster_service.dart'; enum LoginState { idle, loading, } class LoginController extends GetxController { final loginController = TextEditingController(); final passwordController = TextEditingController(); final anyUserExists = false.obs; final loginState = LoginState.idle.obs; @override void onInit() { super.onInit(); init(); } Future init() async { loginState.value = LoginState.loading; anyUserExists.value = await DBService.to.db.anyUserExists(); loginState.value = LoginState.idle; } @override void onClose() { loginController.dispose(); passwordController.dispose(); super.onClose(); } String sanitize(String value) { return value.replaceAll(RegExp(r'[^а-яА-Яa-zA-Z0-9]'), ''); } Future register() async { final login = loginController.text; final password = passwordController.text; if (login.isEmpty || password.isEmpty) { ToasterService.to.error( title: "Ошибка", message: "Логин и пароль не могут быть пустыми", ); return; } loginState.value = LoginState.loading; final UserData? user; try { user = await DBService.to.db.addUser( login: login, password: password, ); } catch (e) { ToasterService.to.error( title: "Ошибка", message: "Пользователь с таким логином уже существует", ); return; } loginState.value = LoginState.idle; if (user == null) { ToasterService.to.error( title: "Ошибка", message: "Пользователь с таким логином уже существует", ); return; } ToasterService.to.success( title: "Успех", message: "Пользователь успешно зарегистрирован", ); Get.offAllNamed("/", arguments: user); } Future login() async { final login = loginController.text; final password = passwordController.text; if (login.isEmpty || password.isEmpty) { ToasterService.to.error( title: "Ошибка", message: "Логин и пароль не могут быть пустыми!", ); return; } loginState.value = LoginState.loading; final user = await DBService.to.db.findUser( login: login, password: password, ); loginState.value = LoginState.idle; if (user == null) { ToasterService.to.error( title: "Ошибка", message: "Пользователь с такой связкой данных не существует!", ); return; } ToasterService.to.success( title: "Успех", message: "Привет, ${user.login}!", ); Get.offAllNamed("/", arguments: user); } }