89 lines
1.8 KiB
Dart
89 lines
1.8 KiB
Dart
import 'package:easy_localization/easy_localization.dart';
|
|
import 'package:email_validator/email_validator.dart';
|
|
import 'package:yimaru_app/ui/common/translations/locale_keys.g.dart';
|
|
|
|
class FormValidator {
|
|
// Form validator
|
|
static String? validateForm(String? value) {
|
|
if (value == null) {
|
|
return null;
|
|
}
|
|
|
|
if (value.isEmpty) {
|
|
return LocaleKeys.required_field.tr();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Full name validator
|
|
static String? validateFullNameForm(String? value) {
|
|
if (value == null) {
|
|
return null;
|
|
}
|
|
|
|
if (value.isEmpty) {
|
|
return LocaleKeys.required_field.tr();
|
|
}
|
|
final regex = RegExp(r'^\S+\s+\S+.*$');
|
|
|
|
if (!regex.hasMatch(value.trim())) {
|
|
return LocaleKeys.enter_full_name.tr();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Email validator
|
|
static String? validateEmailForm(String? value) {
|
|
if (value == null) {
|
|
return null;
|
|
}
|
|
|
|
if (value.isEmpty) {
|
|
return LocaleKeys.required_field.tr();
|
|
}
|
|
|
|
if (!EmailValidator.validate(value)) {
|
|
return LocaleKeys.invalid_email.tr();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Password validator
|
|
static String? validatePasswordForm(String? value) {
|
|
if (value == null) {
|
|
return null;
|
|
}
|
|
|
|
if (value.isEmpty) {
|
|
return LocaleKeys.required_field.tr();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Phone number validator
|
|
static String? validatePhoneNumberForm(String? value) {
|
|
if (value == null) {
|
|
return null;
|
|
}
|
|
|
|
if (value.isEmpty) {
|
|
return LocaleKeys.required_field.tr();
|
|
}
|
|
|
|
// Regex validation
|
|
final regex = RegExp(r'^251');
|
|
|
|
if (!regex.hasMatch(value)) {
|
|
return LocaleKeys.phone_must_start_with.tr();
|
|
}
|
|
|
|
// Length check first (optional but recommended)
|
|
if (value.length != 12) {
|
|
return LocaleKeys.phone_must_be.tr();
|
|
}
|
|
return null;
|
|
}
|
|
}
|