Начальный коммит
This commit is contained in:
75
lib/Pages/controllers/AuthController.dart
Normal file
75
lib/Pages/controllers/AuthController.dart
Normal file
@@ -0,0 +1,75 @@
|
||||
// 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');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user