Files
Stocky/lib/Pages/views/login_screen.dart

149 lines
4.9 KiB
Dart

// lib/pages/login_screen.dart
import 'package:flutter/material.dart';
import 'package:Stocky/Pages/controllers/AuthController.dart';
import 'package:Stocky/Pages/widgets/phone_input_formatter.dart';
import 'package:Stocky/classes/styles.dart';
import 'package:get/get.dart';
import 'package:extended_masked_text/extended_masked_text.dart';
class LoginScreen extends StatelessWidget {
final AuthController controller = Get.put(AuthController());
LoginScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Вход", style: AppStyles.titleLarge)),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Добро пожаловать!",
style: AppStyles.titleLarge, // ← Стиль заголовка
textAlign: TextAlign.center,
),
const SizedBox(height: 30),
Obx(() => _buildAuthForm(controller)),
const SizedBox(height: 40),
Text(
"Мы отправим SMS для подтверждения",
style: AppStyles.description, // ← Стиль описания
textAlign: TextAlign.center,
),
],
),
),
);
}
Widget _buildAuthForm(AuthController controller) {
if (controller.state == 'inputPhone') {
return _buildPhoneInputForm(controller);
} else {
return _buildCodeInputForm(controller);
}
}
Widget _buildPhoneInputForm(AuthController controller) {
final phonecontrol = MaskedTextController(mask: '+7 (000) 000-00-00');
return Column(
children: [
// Ввод номера
TextField(
controller: phonecontrol,
onChanged: controller.phoneNumberInput,
keyboardType: TextInputType.phone,
decoration: InputDecoration(
labelText: "Номер телефона",
prefixIcon: AppStyles.createPrimaryIcon(Icons.phone),
hintText: "+7 (999) 123-45-67",
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
filled: true,
fillColor: Colors.grey[100],
labelStyle: AppStyles.body, // ← Стиль для метки
hintStyle: AppStyles.description, // ← Стиль для подсказки
),
inputFormatters: [PhoneInputFormatter()],
),
const SizedBox(height: 30),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: controller.sendCode,
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
padding: const EdgeInsets.symmetric(vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Text(
"Отправить код",
style: AppStyles.title, // ← Стиль текста кнопки
),
),
),
],
);
}
Widget _buildCodeInputForm(AuthController controller) {
return Column(
children: [
// Ввод кода
TextField(
controller: MaskedTextController(mask: '00000'),
onChanged: controller.verificationCodeInput,
keyboardType: TextInputType.number,
obscureText: true,
decoration: InputDecoration(
labelText: "Код подтверждения",
prefixIcon: AppStyles.createPrimaryIcon(Icons.lock),
hintText: "Введите 6-значный код",
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
filled: true,
fillColor: Colors.grey[100],
labelStyle: AppStyles.body,
hintStyle: AppStyles.description,
),
),
const SizedBox(height: 30),
SizedBox(
width: double.infinity,
child: ElevatedButton(
onPressed: controller.submit,
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
padding: const EdgeInsets.symmetric(vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Text("Подтвердить", style: AppStyles.title),
),
),
// Кнопка "Назад"
const SizedBox(height: 20),
TextButton(
onPressed: () {
controller.setState('inputPhone');
controller.verificationCode('');
},
child: Text(
"Вернуться к вводу номера",
style: AppStyles.link, // ← Стиль ссылки
),
),
],
);
}
}