Extracted login validation logic from _validateLogin method and moved it to alidator callback in TextFormField widget.

This commit is contained in:
Naresh Pratista 2024-12-02 14:12:42 +07:00
parent 4cbae2f613
commit d8ef3034a2

View File

@ -115,22 +115,6 @@ class _SigninScreenState extends State<SigninScreen> {
CustomSnackBar.show(context, message: message, isError: true); CustomSnackBar.show(context, message: message, isError: true);
} }
String? _validateLogin(String? value) {
if (value == null || value.isEmpty) {
return 'Login credential cannot be empty';
}
value = value.trim();
if (value.contains('@')) {
return context.read<ValidatorProvider>().emailValidator(value);
} else if (RegExp(r'^\d{ 10}$').hasMatch(value)) {
return null; // Valid NISN
} else {
return 'Please enter a valid email or NISN (10 digits)';
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return GestureDetector(
@ -190,20 +174,50 @@ class _SigninScreenState extends State<SigninScreen> {
labelText: 'Email or NISN', labelText: 'Email or NISN',
hintText: 'Enter Email or NISN Number', hintText: 'Enter Email or NISN Number',
keyboardType: TextInputType.emailAddress, keyboardType: TextInputType.emailAddress,
validator: _validateLogin, validator: (value) {
validatorProvider.validateField(
'login', value?.trim(), validator: (val) {
if (val == null || val.isEmpty) {
return 'Login credential cannot be empty';
}
val = val.trim();
if (val.contains('@')) {
return validatorProvider.emailValidator(val);
} else if (RegExp(r'^\d{10}$').hasMatch(val)) {
return null; // Valid NISN
} else {
return 'Please enter a valid email or NISN (10 digits)';
}
});
return validatorProvider.getError('login');
},
onChanged: (value) => onChanged: (value) =>
context.read<ValidatorProvider>().validateField( validatorProvider.validateField(
'login', 'login',
value?.trim(), value?.trim(),
validator: _validateLogin, validator: (val) {
if (val == null || val.isEmpty) {
return 'Login credential cannot be empty';
}
val = val.trim();
if (val.contains('@')) {
return validatorProvider.emailValidator(val);
} else if (RegExp(r'^\d{10}$').hasMatch(val)) {
return null; // Valid NISN
} else {
return 'Please enter a valid email or NISN (10 digits)';
}
},
), ),
onFieldSubmitted: (_) { onFieldSubmitted: (_) {
FocusScope.of(context) FocusScope.of(context)
.requestFocus(_passwordFocus); .requestFocus(_passwordFocus);
}, },
errorText: context errorText: validatorProvider.getError('login'),
.read<ValidatorProvider>()
.getError('login'),
), ),
const SizedBox(height: 14), const SizedBox(height: 14),
CustomFieldWidget( CustomFieldWidget(
@ -217,7 +231,12 @@ class _SigninScreenState extends State<SigninScreen> {
obscureText: obscureText:
validatorProvider.isObscure('password'), validatorProvider.isObscure('password'),
keyboardType: TextInputType.visiblePassword, keyboardType: TextInputType.visiblePassword,
validator: validatorProvider.passwordValidator, validator: (value) {
validatorProvider.validateField('password', value,
validator:
validatorProvider.passwordValidator);
return validatorProvider.getError('password');
},
onChanged: (value) => onChanged: (value) =>
validatorProvider.validateField( validatorProvider.validateField(
'password', 'password',