80 lines
2.3 KiB
Dart
80 lines
2.3 KiB
Dart
///
|
||
/// Сервис со вспомогательными функциями
|
||
///
|
||
class Utils {
|
||
///
|
||
/// Склонение числительных
|
||
///
|
||
/// [number] Число, по которому будем склонять [int]
|
||
/// [titles] Возможные наборы данных. Должно быть 3 варианта [List<String>]
|
||
///
|
||
/// Пример:
|
||
///
|
||
/// ```dart
|
||
/// print(HelperService.declOfNum(1, ['секунда', 'секунды', 'секунд'])); // секунда
|
||
/// print(HelperService.declOfNum(2, ['секунда', 'секунды', 'секунд'])); // секунды
|
||
/// print(HelperService.declOfNum(5, ['секунда', 'секунды', 'секунд'])); // секунд
|
||
/// ```
|
||
///
|
||
static T declOfNum<T>(int number, List<T> titles) {
|
||
List<int> cases = <int>[2, 0, 1, 1, 1, 2];
|
||
|
||
return titles[(number % 100 > 4 && number % 100 < 20)
|
||
? 2
|
||
: cases[(number % 10 < 5) ? number % 10 : 5]];
|
||
}
|
||
}
|
||
|
||
typedef ValidatorFunc = String? Function(String? value);
|
||
|
||
class Validators {
|
||
///
|
||
/// Комбинирование нескольких валидаторов
|
||
/// Исполнение идет в порядке их передачи
|
||
///
|
||
static String? combine(List<ValidatorFunc> validators, String? value) {
|
||
for (ValidatorFunc vfunc in validators) {
|
||
final String? result = vfunc.call(value);
|
||
|
||
if (result != null) {
|
||
return result;
|
||
}
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
///
|
||
/// Метод валидации данных
|
||
///
|
||
static String? string(String? value) {
|
||
if (value == null || value.isEmpty) {
|
||
return 'Значение не может быть пустым';
|
||
}
|
||
|
||
if (value.length < 3) {
|
||
return 'Значение не может быть меньше 3 символов';
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
static String? email(String? email) {
|
||
if (email == null) return null;
|
||
|
||
if (email.isEmpty) return 'Поле e-mail пустое';
|
||
if (!email.contains('@')) return 'Неверный e-mail';
|
||
|
||
return null;
|
||
}
|
||
|
||
static String? phone(String? phone) {
|
||
if (phone == null) return null;
|
||
|
||
if (phone.isEmpty) return 'Введите номер телефона';
|
||
if (phone.length != 18) return 'Неверный формат номера';
|
||
|
||
return null;
|
||
}
|
||
}
|