65 lines
2.1 KiB
Dart
65 lines
2.1 KiB
Dart
// Flutter imports:
|
|
import 'package:flutter/material.dart';
|
|
import 'package:remever/common/resources.dart';
|
|
import 'package:remever/common/typography.dart';
|
|
import 'package:remever/components/extensions/context.dart';
|
|
|
|
class AuthTextField extends StatelessWidget {
|
|
const AuthTextField({required this.email, super.key, this.autofocus = true});
|
|
|
|
final TextEditingController email;
|
|
final bool autofocus;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final OutlineInputBorder border = OutlineInputBorder(
|
|
borderRadius: const BorderRadius.all(Radius.circular(8)).r,
|
|
borderSide: BorderSide(color: AppColors.gray),
|
|
);
|
|
|
|
return TextFormField(
|
|
autofocus: autofocus,
|
|
controller: email,
|
|
validator: (String? value) {
|
|
if (value == null || value == '') return 'Поле не может быть пустым';
|
|
if (!value.contains('@') || !value.contains('.')) {
|
|
return 'Неверный e-mail';
|
|
}
|
|
return null;
|
|
},
|
|
cursorColor: AppColors.primary,
|
|
|
|
decoration: InputDecoration(
|
|
filled: true,
|
|
fillColor: AppColors.white,
|
|
focusedBorder: border,
|
|
enabledBorder: border,
|
|
errorBorder: border,
|
|
focusedErrorBorder: border,
|
|
hintText: 'Введите e-mail',
|
|
hintStyle: const TextStyle(fontWeight: FontWeight.w400, height: 1.2),
|
|
errorStyle: SemiBold12px().style.copyWith(color: AppColors.red),
|
|
suffixIconConstraints: const BoxConstraints(minWidth: 0, minHeight: 0),
|
|
suffixIcon: Padding(
|
|
padding: const EdgeInsets.only(right: 12).r,
|
|
child: InkWell(
|
|
onTap: () {
|
|
email.clear();
|
|
},
|
|
child: SizedBox.square(
|
|
dimension: 24.r,
|
|
child: DecoratedBox(
|
|
decoration: BoxDecoration(
|
|
color: AppColors.bg,
|
|
shape: BoxShape.circle,
|
|
),
|
|
child: Icon(Icons.close, color: AppColors.disabled, size: 16.r),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|