Files
Stocky/lib/Pages/controllers/AuthController.dart

76 lines
2.2 KiB
Dart

// lib/controllers/auth_controller.dart
import 'package:Stocky/services/api/api_service.dart';
import 'package:Stocky/services/local/StorageService.dart';
import 'package:get/get.dart';
class AuthController extends GetxController {
// Состояния
final _state = 'inputPhone'.obs;
final ApiService apicontr = Get.find<ApiService>();
Rx<String> phoneNumber = ''.obs;
Rx<String> verificationCode = ''.obs;
// Получаем текущее состояние
String get state => _state.value;
// Меняем состояние
void setState(String newState) {
_state.value = newState;
}
// Ввод номера
void phoneNumberInput(String value) {
phoneNumber.value = value;
}
// Проверка номера
bool get isPhoneNumberValid {
final clean = phoneNumber.value.replaceAll(RegExp(r'[^0-9]'), '');
return clean.length == 11 && clean.startsWith('7'); // или 10, если без +7
}
// Получить "чистый" номер (для отправки на сервер)
String get phoneNumberClean {
return phoneNumber.value.replaceAll(RegExp(r'[^0-9]'), '');
}
// Ввод кода
void verificationCodeInput(String value) {
verificationCode.value = value;
}
Future<void> sendCode() async {
if (phoneNumber.value.isEmpty) {
Get.snackbar('Ошибка', 'Введите номер телефона');
return;
}
if (!isPhoneNumberValid) {
Get.snackbar('Ошибка', 'Неверный номер телефона');
return;
}
await Future.delayed(const Duration(seconds: 1));
setState('inputCode');
await apicontr.registerByPhone(phoneNumberClean);
}
// Подтвердить код
Future<void> submit() async {
if (verificationCode.value.isEmpty) {
Get.snackbar('Ошибка', 'Введите код подтверждения');
return;
}
await Future.delayed(const Duration(seconds: 1));
final reg = await apicontr.loginByPhone(
phoneNumber.value,
verificationCode.value,
);
if (reg) {
Get.find<LocalStorageService>().putNumber(phoneNumber.value);
Get.snackbar('Успешно', 'Вы вошли!');
Get.offAllNamed('/home');
}
}
}