339 lines
9.6 KiB
Dart
339 lines
9.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
import 'package:loader_overlay/loader_overlay.dart';
|
|
import 'package:intl/intl.dart';
|
|
|
|
extension ResponsiveExt on BuildContext {
|
|
/// Returns true if the current running device is a mobile device
|
|
bool get isMobile => MediaQuery.of(this).size.shortestSide < 600;
|
|
}
|
|
|
|
extension IntExt on int {
|
|
String formatAsK() {
|
|
if (this >= 1000000) {
|
|
return this % 1000000 == 0
|
|
? '${(this / 1000000).toStringAsFixed(0)}M'
|
|
: '${(this / 1000000).toStringAsFixed(1)}M';
|
|
} else if (this >= 1000) {
|
|
return this % 1000 == 0
|
|
? '${(this / 1000).toStringAsFixed(0)}K'
|
|
: '${(this / 1000).toStringAsFixed(1)}K';
|
|
}
|
|
return toString();
|
|
}
|
|
}
|
|
|
|
extension ThemeExt on BuildContext {
|
|
/// Theme extensions
|
|
TextStyle get titleStyle => GoogleFonts.nunito(
|
|
color: appColor.blackColor, fontSize: 16.sp, fontWeight: FontWeight.w400);
|
|
|
|
TextStyle get titleStyleRegular => GoogleFonts.nunito(
|
|
color: appColor.blackColor, fontSize: 19.sp, fontWeight: FontWeight.w600);
|
|
|
|
TextStyle get subTitleStyle => GoogleFonts.nunito(
|
|
fontWeight: FontWeight.w500,
|
|
color: appColor.blackColor,
|
|
fontSize: 18.sp,
|
|
);
|
|
TextStyle get buttonTestStyle => GoogleFonts.nunito(
|
|
fontWeight: FontWeight.w600,
|
|
color: appColor.blackColor,
|
|
fontSize: 14.sp,
|
|
);
|
|
|
|
TextStyle get subTitleTextStyle => GoogleFonts.nunito(
|
|
fontWeight: FontWeight.w400,
|
|
color: appColor.greyColor,
|
|
fontSize: 16.sp,
|
|
);
|
|
TextStyle get subTitleTextStyleBloack => GoogleFonts.nunito(
|
|
fontWeight: FontWeight.w500,
|
|
color: appColor.blackColor,
|
|
fontSize: 14.sp,
|
|
);
|
|
|
|
TextStyle get subTitleTxtStyleblack => GoogleFonts.nunito(
|
|
fontWeight: FontWeight.w400,
|
|
color: appColor.blackColor,
|
|
fontSize: 13.sp,
|
|
);
|
|
|
|
TextStyle get subTitleTxtStyle => GoogleFonts.nunito(
|
|
fontWeight: FontWeight.w400,
|
|
color: appColor.greyColor,
|
|
fontSize: 13.sp,
|
|
);
|
|
|
|
TextStyle get bodyTxtStyle => GoogleFonts.chivo(
|
|
fontSize: 14.sp, fontWeight: FontWeight.w400, color: appColor.blackColor);
|
|
|
|
TextStyle get bodyTxtStyleTwo => GoogleFonts.chivo(
|
|
fontSize: 13.sp,
|
|
fontWeight: FontWeight.w400,
|
|
color: appColor.blackColor,
|
|
decoration: TextDecoration.underline,
|
|
decorationColor: appColor.primary);
|
|
|
|
TextStyle get smallTxtStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 10.sp,
|
|
);
|
|
|
|
TextStyle get smallTxtStyleBold => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 10.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get titleTextStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 16.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get cardTitleStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 13.76.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get cardTitleStyleWhite => GoogleFonts.chivo(
|
|
color: appColor.whiteColor,
|
|
fontSize: 13.76.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get dropdownBodyTxtStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 14.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get ratingTextStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 40.sp,
|
|
fontWeight: FontWeight.w700,
|
|
);
|
|
|
|
TextStyle get noReviewYetTextStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 33.sp,
|
|
fontWeight: FontWeight.w700,
|
|
);
|
|
|
|
TextStyle get dropdownTitleTxtStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 13.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get yourTicketTextStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 13.5.sp,
|
|
fontWeight: FontWeight.bold,
|
|
);
|
|
|
|
TextStyle get priceBodyTxtStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 16.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get orderDetailsHeadingTxtStyle => GoogleFonts.chivo(
|
|
color: appColor.blackColor,
|
|
fontSize: 18.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get buttonTxtStyle => GoogleFonts.chivo(
|
|
color: appColor.whiteColor,
|
|
fontSize: 15.59.sp,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get bottomNavTextStyle => GoogleFonts.chivo(
|
|
fontSize: 9.sp,
|
|
color: appColor.greyColor500,
|
|
fontWeight: FontWeight.w400,
|
|
);
|
|
|
|
TextStyle get headingTextStyle => GoogleFonts.chivo(
|
|
fontSize: 20.sp,
|
|
color: appColor.blackColor,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get mainHeadingTextStyle => GoogleFonts.chivo(
|
|
fontSize: 35.sp,
|
|
color: appColor.blackColor,
|
|
fontWeight: FontWeight.w500,
|
|
);
|
|
|
|
TextStyle get orderConfirmHeadingTextStyle => GoogleFonts.chivo(
|
|
fontSize: 28.sp,
|
|
color: appColor.blackColor,
|
|
fontWeight: FontWeight.w600,
|
|
);
|
|
}
|
|
|
|
/// Build context extensions
|
|
extension ContextExtension on BuildContext {
|
|
void to({required Widget screen}) {
|
|
Navigator.push(this, MaterialPageRoute(builder: (context) => screen));
|
|
}
|
|
|
|
///Pops all screen until last screen then replaces it with the required screen
|
|
void clearAndPush({required String routePath, Object? args}) {
|
|
while (GoRouter.of(this).canPop()) {
|
|
GoRouter.of(this).pop();
|
|
}
|
|
GoRouter.of(this).pushReplacement(routePath, extra: args);
|
|
}
|
|
|
|
/// Get color scheme
|
|
ColorScheme get appColor => Theme.of(this).colorScheme;
|
|
|
|
/// Get current height of the screen
|
|
double get height => MediaQuery.of(this).size.height;
|
|
|
|
/// Get current height of the screen
|
|
double get width => MediaQuery.of(this).size.width;
|
|
|
|
/// Provides safe context
|
|
BuildContext? getSafeContext() {
|
|
if (mounted) {
|
|
return this;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// show global loader
|
|
void showLoader({bool show = true}) {
|
|
if (mounted) {
|
|
if (show) {
|
|
loaderOverlay.show();
|
|
} else {
|
|
loaderOverlay.hide();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension DateTimeExtension on DateTime? {
|
|
bool? isAfterOrEqualTo(DateTime dateTime) {
|
|
final date = this;
|
|
if (date != null) {
|
|
final isAtSameMomentAs = dateTime.isAtSameMomentAs(date);
|
|
return isAtSameMomentAs | date.isAfter(dateTime);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
String getFormattedDate({String pattern = "dd-mm-yyyy"}) {
|
|
if (this != null) {
|
|
return DateFormat(pattern).format(this!.toLocal());
|
|
}
|
|
return "";
|
|
}
|
|
|
|
bool? isBeforeOrEqualTo(DateTime dateTime) {
|
|
final date = this;
|
|
if (date != null) {
|
|
final isAtSameMomentAs = dateTime.isAtSameMomentAs(date);
|
|
return isAtSameMomentAs | date.isBefore(dateTime);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
bool? isBetween(DateTime fromDateTime, DateTime toDateTime) {
|
|
final date = this;
|
|
if (date != null) {
|
|
final isAfter = date.isAfterOrEqualTo(fromDateTime) ?? false;
|
|
final isBefore = date.isBeforeOrEqualTo(toDateTime) ?? false;
|
|
return isAfter && isBefore;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/// Color scheme extensions
|
|
|
|
extension ColorExtension on String {
|
|
toColor() {
|
|
var hexColor = this.replaceAll("#", "");
|
|
if (hexColor.length == 6) {
|
|
hexColor = "FF$hexColor";
|
|
}
|
|
if (hexColor.length == 8) {
|
|
return Color(int.parse("0x$hexColor"));
|
|
}
|
|
}
|
|
}
|
|
|
|
extension ColorExt on ColorScheme {
|
|
Color get blackColor =>
|
|
brightness == Brightness.light ? const Color(0xff1A1A1A) : Colors.white38;
|
|
|
|
Color get greyColor =>
|
|
brightness == Brightness.light ? const Color(0xff666666) : Colors.white30;
|
|
|
|
Color get greyColor500 =>
|
|
brightness == Brightness.light ? Color(0xff6F6B7D) : Colors.white30;
|
|
|
|
Color get greyColor400 =>
|
|
brightness == Brightness.light ? Colors.grey.shade400 : Colors.white30;
|
|
|
|
Color get greyColor200 =>
|
|
brightness == Brightness.light ? Colors.grey.shade200 : Colors.white12;
|
|
|
|
Color get greyColor300 =>
|
|
brightness == Brightness.light ? Colors.grey.shade300 : Colors.white12;
|
|
|
|
Color get greyColor100 =>
|
|
brightness == Brightness.light ? Colors.grey.shade100 : Colors.white12;
|
|
|
|
Color get greyColor50 =>
|
|
brightness == Brightness.light ? Color(0xffF8F8F8) : Colors.white12;
|
|
|
|
Color get lightBlackColor =>
|
|
brightness == Brightness.light ? Colors.black26 : Colors.white30;
|
|
|
|
Color get whiteColor =>
|
|
brightness == Brightness.light ? Colors.white : Colors.black;
|
|
|
|
Color get backgroundColor =>
|
|
brightness == Brightness.dark ? const Color(0xFF0F0E17) : Colors.white;
|
|
|
|
Color get transparent => Colors.transparent;
|
|
|
|
Color get redColor => Colors.red;
|
|
|
|
Color get primarycolor => Color(0xff228B22);
|
|
|
|
// Color get reviewColor =>
|
|
// brightness == Brightness.dark ? Colors.green : const Color(0xff006D60);
|
|
//
|
|
// Color get successColor =>
|
|
// brightness == Brightness.light ? Colors.green : Colors.green;
|
|
//
|
|
// Color get chatTextColor =>
|
|
// brightness == Brightness.light ? Colors.blue : Colors.lightBlue;
|
|
Color get smallTextColor => brightness == Brightness.light
|
|
? const Color(0xFF6A6A6A)
|
|
: const Color(0xFF6A6A6A);
|
|
Color get darkGreen => brightness == Brightness.light
|
|
? const Color(0xFF1D713E)
|
|
: const Color(0xFF07E55E);
|
|
|
|
Color get lightGreen => brightness == Brightness.light
|
|
? const Color(0xFFEDF8F1)
|
|
: Colors.greenAccent;
|
|
|
|
Color get yellow =>
|
|
brightness == Brightness.light ? const Color(0xFFE9A706) : Colors.yellow;
|
|
}
|