Initial and done prolly

This commit is contained in:
Andrew 2025-01-05 16:01:21 +07:00
commit 6f88b9966f
175 changed files with 15445 additions and 0 deletions

View file

@ -0,0 +1,128 @@
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<void> 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<void> 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<void> 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);
}
}