import 'package:initial_folder/theme.dart'; import 'package:intl/intl.dart'; import 'package:recase/recase.dart'; import 'package:flutter/material.dart'; String? validateName(String? value) { if (value!.isEmpty) { return 'Nama lengkap tidak boleh kosong'; } else if (!RegExp(r'^[a-zA-Z]+(?: [a-zA-Z]+)*$').hasMatch(value)) { return 'Format Nama Tidak Valid'; } else { return null; } } String? validatePassword(String? value) { if (value!.isEmpty) { return 'Password tidak boleh kosong'; } else if (value.length < 8) { return 'Password Tidak Sesuai'; } else { return null; } } String? validateRePassword(String? value, String password) { if (value!.isEmpty) { return 'Password tidak boleh kosong'; } else if (value.length < 8) { return 'Password minimal harus berjumlah 8 karakter'; } else if (value != password) { return 'Password tidak sama'; } return null; } String? validateEmail(String? value) { Pattern pattern = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; RegExp regex = RegExp(pattern.toString()); if (value!.isEmpty) { return 'Email tidak boleh kosong'; } else if (!regex.hasMatch(value)) { return 'Mohon masukkan email yang valid'; } else { return null; } } String? validateReEmail(String? value, String email) { Pattern pattern = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; RegExp regex = RegExp(pattern.toString()); if (value!.isEmpty) { return 'Konfirmasi email tidak boleh kosong'; } else if (!regex.hasMatch(value)) { return 'Mohon masukkan konfirmasi email yang valid'; } else if (value != email) { return 'Email tidak sama'; } else { return null; } } String? validatePhone(String? value) { Pattern pattern = r'^[0][0-9]{9,30}$'; RegExp regex = RegExp(pattern.toString()); if (value!.isEmpty) { return 'Nomor telepon tidak boleh kosong'; } else if (!regex.hasMatch(value)) { return 'Mohon masukkan nomor telepon yang valid'; } else if (value!.length > 15) { return 'Nomor telepon maksimal 15 karakter'; } else { return null; } } String? validateNomorKartu(String? value) { if (value!.length != 22) { return 'Panjang Nomor Kartu harus 16 karakter'; } else { return null; } } String? validateCoupon(String? value) { if (value!.contains(' ')) { return 'Harap masukkan kupon tanpa spasi'; } else { return null; } } String? validateMasaBerlaku(String? value) { if (value!.length != 5) { return 'Data belum lengkap'; } else { return null; } } String? validateKodeKeamanan(String? value) { if (value!.length != 3) { return 'Panjang Kode Keamanan harus 3 karakter'; } else { return null; } } String? validateDate(String? value) { if (value!.isEmpty) { return 'Data tidak boleh kosong'; } int year; int month; // The value contains a forward slash if the month and year has been // entered. if (value.contains(new RegExp(r'(\/)'))) { var split = value.split(new RegExp(r'(\/)')); // The value before the slash is the month while the value to right of // it is the year. month = int.parse(split[0]); year = int.parse(split[1]); } else { // Only the month was entered month = int.parse(value.substring(0, (value.length))); year = -1; // Lets use an invalid year intentionally } if ((month < 1) || (month > 12)) { // A valid month is between 1 (January) and 12 (December) return 'Masukkan Bulan yang valid'; } var fourDigitsYear = convertYearTo4Digits(year); if ((fourDigitsYear < 1) || (fourDigitsYear > 2099)) { // We are assuming a valid year should be between 1 and 2099. // Note that, it's valid doesn't mean that it has not expired. return 'Masukkan Tahun yang valid'; } if (!hasDateExpired(month, year)) { return "Kartu telah kadaluarsa"; } return null; } /// Convert the two-digit year to four-digit year if necessary int convertYearTo4Digits(int year) { if (year < 100 && year >= 0) { var now = DateTime.now(); String currentYear = now.year.toString(); String prefix = currentYear.substring(0, currentYear.length - 2); year = int.parse('$prefix${year.toString().padLeft(2, '0')}'); } return year; } bool hasDateExpired(int? month, int? year) { return !(month == null || year == null) && isNotExpired(year, month); } bool isNotExpired(int year, int month) { // It has not expired if both the year and date has not passed return !hasYearPassed(year) && !hasMonthPassed(year, month); } bool hasMonthPassed(int year, int month) { var now = DateTime.now(); // The month has passed if: // 1. The year is in the past. In that case, we just assume that the month // has passed // 2. Card's month (plus another month) is less than current month. return hasYearPassed(year) || convertYearTo4Digits(year) == now.year && (month < now.month + 1); } bool hasYearPassed(int year) { int fourDigitsYear = convertYearTo4Digits(year); var now = DateTime.now(); // The year has passed if the year we are currently, is greater than card's // year return fourDigitsYear < now.year; } String cleanTagHtml(String htmlText) { RegExp exp = RegExp(r"<[^>]*>", multiLine: true, caseSensitive: true); return htmlText.replaceAll(exp, ''); } String filterDuration(String str) { str = str.replaceAll('m', ' menit '); str = str.replaceAll('j', ' jam '); str = str.replaceAll('d', ' detik video pembelajaran'); return str; } // numberFormat(String? discountPrice) { // return NumberFormat.currency( // locale: 'id', // decimalDigits: 0, // symbol: 'Rp. ', // ).format(int.parse(discountPrice ?? '0')); // } String? birthDateValidator(String? value) { final DateTime now = DateTime.now(); final DateFormat formatter = DateFormat('yyyy'); final String formatted = formatter.format(now); String? str1 = value; List str2 = str1!.split('/'); String month = str2.isNotEmpty ? str2[0] : ''; String day = str2.length > 1 ? str2[1] : ''; String year = str2.length > 2 ? str2[2] : ''; if (value!.isEmpty) { return 'BirthDate is Empty'; } else if (int.parse(month) > 13) { return 'Month is invalid'; } else if (int.parse(day) > 32) { return 'Day is invalid'; } else if ((int.parse(year) > int.parse(formatted))) { return 'Year is invalid'; } else if ((int.parse(year) < 1920)) { return 'Year is invalid'; } return null; } String validatorSearch(String inputSearch) { print("ini search"); inputSearch = inputSearch.trimLeft(); inputSearch = inputSearch.replaceAll(' ', '%'); return inputSearch; } String validatorSearchFilter(String inputSearch) { print("ini search"); inputSearch = inputSearch.trimLeft(); inputSearch = inputSearch.replaceAll(' ', '%'); return inputSearch; } String dateFormatUlasan(String date) { date = date.replaceAll(' ', '-'); date = date.replaceAll('Januari', 'Jan'); date = date.replaceAll('Februari', 'Feb'); date = date.replaceAll('Maret', 'Mar'); date = date.replaceAll('April', 'Apr'); date = date.replaceAll('Juni', 'Jun'); date = date.replaceAll('Juli', 'Jul'); date = date.replaceAll('Agustus', 'Agu'); date = date.replaceAll('September', 'Sep'); date = date.replaceAll('Oktober', 'Okt'); date = date.replaceAll('November', 'Nov'); date = date.replaceAll('Desember', 'Des'); return date; } String formatAktivitas(String input) { if (input.length >= 6) { input = input.replaceAll('m', ':'); input = input.replaceAll('j', ':'); input = input.replaceAll('d', ''); return input = '0' + input; } else { input = input.replaceAll('m', ':'); input = input.replaceAll('j', ':'); input = input.replaceAll('d', ''); } return input; } String persentaseUlasan(String input) { input = input.replaceAll('%', ''); if (input.length > 4) { input = input.replaceAll('.', ''); input = input.substring(0, 2); } return input; } String iconCategory(String input) { input = input.replaceAll('fas fa-', ''); return input.camelCase; } // late List _words; // String _upperCaseFirstLetter(String word) { // return '${word.substring(0, 1).toUpperCase()}${word.substring(1).toLowerCase()}'; // } // String getCamelCase({String separator: ''}) { // List words = _words.map(_upperCaseFirstLetter).toList(); // if (_words.isNotEmpty) { // words[0] = words[0].toLowerCase(); // } // return words.join(separator); // } // List words(String subject, [Pattern customPattern = defaultPattern]) { // if (subject is! String || subject.length == 0) { // return []; // } // RegExp pattern; // if (customPattern is String) { // pattern = RegExp(customPattern); // } else if (customPattern is RegExp) { // pattern = customPattern; // } // return pattern.allMatches(subject).map((m) => m.group(0)).toList(); // } // String camelCase(String subject) { // List _splittedString = words(subject); // if (_splittedString.length == 0) { // return ''; // } // String _firstWord = lowerCase(_splittedString[0]); // List _restWords = _splittedString // .sublist(1) // .map((String x) => capitalize(x, true)) // .toList(); // return _firstWord + _restWords.join(''); // } String filterAnd(String input) { input = input.replaceAll('&', '&'); return input; } numberFormat(String? discountPrice) { return NumberFormat.currency( locale: 'id', decimalDigits: 0, symbol: 'Rp ', ).format(int.parse(discountPrice ?? '0')); } customTextValidator(bool? isTextEmpty, String validatorText) { return Text( isTextEmpty == null ? '' : isTextEmpty ? " $validatorText" : '', style: primaryTextStyle.copyWith( color: Colors.red[700], fontSize: 12.5, height: isTextEmpty == null ? 0 : isTextEmpty ? null : 0, ), textAlign: TextAlign.start, ); }