You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
10 KiB
Dart
270 lines
10 KiB
Dart
import 'package:auto_size_text/auto_size_text.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
|
|
|
extension CapExtension on String {
|
|
String get toCamelCase => "${this[0].toUpperCase()}${this.substring(1)}";
|
|
|
|
String get inCaps => '${this[0].toUpperCase()}${this.substring(1)}';
|
|
|
|
String get allInCaps => this.toUpperCase();
|
|
|
|
String get capitalizeFirstofEach => this.trim().length > 0 ? this.trim().toLowerCase().split(" ").map((str) => str.inCaps).join(" ") : "";
|
|
}
|
|
|
|
extension TrimString on String {
|
|
String trimString(int minThreshold) {
|
|
if (length > minThreshold) {
|
|
return "${substring(0, 10)}...${substring(length - 4, length)}";
|
|
}
|
|
return this;
|
|
}
|
|
}
|
|
|
|
String displayLocalizedContent({required bool isPhoneLangArabic, required int selectedLanguage, required String englishContent, required String arabicContent}) {
|
|
if (selectedLanguage == 1) {
|
|
return englishContent;
|
|
} else if (selectedLanguage == 2) {
|
|
return arabicContent;
|
|
} else if (selectedLanguage == 3) {
|
|
return isPhoneLangArabic ? arabicContent : englishContent;
|
|
}
|
|
return englishContent;
|
|
}
|
|
|
|
extension EmailValidator on String {
|
|
Widget get toWidget => Text(this);
|
|
|
|
Widget toText10({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle}) => Text(
|
|
this,
|
|
maxLines: maxlines,
|
|
style: TextStyle(fontSize: 10, fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
|
|
);
|
|
|
|
Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isBold = false, int maxLine = 0}) => Text(
|
|
this,
|
|
maxLines: (maxLine > 0) ? maxLine : null,
|
|
style: TextStyle(
|
|
fontSize: 11,
|
|
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600),
|
|
color: color ?? MyColors.darkTextColor,
|
|
letterSpacing: -0.33,
|
|
decoration: isUnderLine ? TextDecoration.underline : null,
|
|
),
|
|
);
|
|
|
|
Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text(
|
|
this,
|
|
textAlign: isCenter ? TextAlign.center : null,
|
|
maxLines: (maxLine > 0) ? maxLine : null,
|
|
style: TextStyle(
|
|
fontSize: 12,
|
|
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
|
|
color: color ?? MyColors.darkTextColor,
|
|
letterSpacing: -0.72,
|
|
decoration: isUnderLine ? TextDecoration.underline : null,
|
|
),
|
|
);
|
|
|
|
Widget toText12Auto({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => AutoSizeText(
|
|
this,
|
|
textAlign: isCenter ? TextAlign.center : null,
|
|
maxLines: (maxLine > 0) ? maxLine : null,
|
|
minFontSize: 8,
|
|
style: TextStyle(
|
|
fontSize: 12,
|
|
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
|
|
color: color ?? MyColors.darkTextColor,
|
|
letterSpacing: -0.72,
|
|
decoration: isUnderLine ? TextDecoration.underline : null,
|
|
),
|
|
);
|
|
|
|
Widget toTextAuto({
|
|
Color? color,
|
|
bool isUnderLine = false,
|
|
bool isBold = false,
|
|
bool isCenter = false,
|
|
int maxLine = 0,
|
|
double fontSize = 12,
|
|
double letterSpacing = -0.72,
|
|
double height = 1,
|
|
}) =>
|
|
AutoSizeText(
|
|
this,
|
|
textAlign: isCenter ? TextAlign.center : null,
|
|
maxLines: (maxLine > 0) ? maxLine : null,
|
|
minFontSize: 5,
|
|
style: TextStyle(
|
|
fontSize: fontSize,
|
|
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
|
|
color: color ?? MyColors.darkTextColor,
|
|
letterSpacing: letterSpacing,
|
|
decoration: isUnderLine ? TextDecoration.underline : null,
|
|
),
|
|
);
|
|
|
|
Widget toText13({Color? color, bool isUnderLine = false}) => Text(
|
|
this,
|
|
style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null),
|
|
);
|
|
|
|
Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, FontWeight? weight, int? maxlines, TextAlign? textAlign, bool isCenter = false}) => Text(
|
|
this,
|
|
textAlign: isCenter ? TextAlign.center : (textAlign ?? TextAlign.left),
|
|
maxLines: maxlines,
|
|
style: TextStyle(
|
|
color: color ?? MyColors.darkTextColor,
|
|
fontSize: 14,
|
|
letterSpacing: -0.48,
|
|
fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600),
|
|
decoration: isUnderLine ? TextDecoration.underline : null),
|
|
);
|
|
|
|
Widget toText16({Color? color, bool isUnderLine = false, bool isBold = false, int? maxlines, double? height, bool isCentered = false}) => Text(
|
|
this,
|
|
maxLines: maxlines,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(
|
|
color: color ?? MyColors.darkTextColor,
|
|
fontSize: 16,
|
|
letterSpacing: -0.64,
|
|
height: height,
|
|
fontWeight: isBold ? FontWeight.bold : FontWeight.w600,
|
|
decoration: isUnderLine ? TextDecoration.underline : null,
|
|
),
|
|
);
|
|
|
|
Widget toText17({Color? color, bool isBold = false}) => Text(
|
|
this,
|
|
style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
|
|
);
|
|
|
|
Widget toText18({Color? color, bool isBold = false, bool isCentered = false}) => Text(
|
|
this,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(fontSize: 18, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.08),
|
|
);
|
|
|
|
Widget toText19({Color? color, bool isBold = false}) => Text(
|
|
this,
|
|
style: TextStyle(fontSize: 19, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -1.14),
|
|
);
|
|
|
|
Widget toText20({Color? color, bool isBold = false, bool isCentered = false}) => Text(
|
|
this,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4),
|
|
);
|
|
|
|
Widget toText21({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text(
|
|
this,
|
|
maxLines: maxlines,
|
|
style: TextStyle(color: color ?? MyColors.grey3AColor, fontSize: 21, letterSpacing: -0.84, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600)),
|
|
);
|
|
|
|
Widget toText22({Color? color, bool isBold = false, bool isCentered = false}) => Text(
|
|
this,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
|
|
);
|
|
|
|
Widget toText24({Color? color, bool isBold = false, bool isCentered = false}) => Text(
|
|
this,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
|
|
);
|
|
|
|
Widget toText30({Color? color, bool isBold = false, bool isCentered = false}) => Text(
|
|
this,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(height: 20 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.2, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
|
|
);
|
|
|
|
Widget toText32({Color? color, bool isBold = false, bool isCentered = false}) => Text(
|
|
this,
|
|
textAlign: isCentered ? TextAlign.center : null,
|
|
style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
|
|
);
|
|
|
|
Widget toText44({Color? color, bool isBold = false}) => Text(
|
|
this,
|
|
style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 44, letterSpacing: -2.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600),
|
|
);
|
|
|
|
Widget toSectionHeading({String upperHeading = "", String lowerHeading = ""}) {
|
|
String upper = "";
|
|
String lower = "";
|
|
String heading = this;
|
|
if (heading.isNotEmpty) {
|
|
List<String> data = heading.split(" ");
|
|
|
|
if (data.length > 1) {
|
|
upper = data[0];
|
|
data.removeAt(0);
|
|
lower = data.join(" ");
|
|
} else {
|
|
lower = data[0];
|
|
}
|
|
}
|
|
if (upperHeading.isNotEmpty) {
|
|
upper = upperHeading;
|
|
}
|
|
if (lowerHeading.isNotEmpty) {
|
|
lower = lowerHeading;
|
|
}
|
|
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
if (upper.isNotEmpty) upper.toText12(),
|
|
lower.toText24(isBold: true),
|
|
],
|
|
);
|
|
}
|
|
|
|
bool isValidEmail() {
|
|
return RegExp(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,}))$').hasMatch(this);
|
|
}
|
|
|
|
String toFormattedDate() {
|
|
String date = this.split("T")[0];
|
|
String time = this.split("T")[1];
|
|
var dates = date.split("-");
|
|
return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a', "en_US").format(DateFormat('hh:mm:ss', "en_US").parse(time))}";
|
|
}
|
|
|
|
String getMonth(int month) {
|
|
switch (month) {
|
|
case 1:
|
|
return "January";
|
|
case 2:
|
|
return "February";
|
|
case 3:
|
|
return "March";
|
|
case 4:
|
|
return "April";
|
|
case 5:
|
|
return "May";
|
|
case 6:
|
|
return "June";
|
|
case 7:
|
|
return "July";
|
|
case 8:
|
|
return "August";
|
|
case 9:
|
|
return "September";
|
|
case 10:
|
|
return "October";
|
|
case 11:
|
|
return "November";
|
|
case 12:
|
|
return "December";
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
}
|