76 lines
2.2 KiB
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');
|
|
}
|
|
}
|
|
}
|