first commit

This commit is contained in:
2025-03-03 20:59:42 +03:00
commit 273e68557a
1099 changed files with 17880 additions and 0 deletions

79
lib/common/utils.dart Normal file
View File

@@ -0,0 +1,79 @@
///
/// Сервис со вспомогательными функциями
///
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;
}
}