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 "";
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |