initial code

This commit is contained in:
2025-01-21 18:29:27 +05:30
commit 9fee5eb24d
191 changed files with 11603 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
// ignore_for_file: file_names
import 'package:flutter/material.dart';
class HexColor extends Color {
static int _getColorFromHex(String hexColor) {
hexColor = hexColor.toUpperCase().replaceAll("#", "");
if (hexColor.length == 6) {
hexColor = "FF$hexColor";
}
return int.parse(hexColor, radix: 16);
}
HexColor(final String hexColor) : super(_getColorFromHex(hexColor));
}

View File

@@ -0,0 +1,76 @@
import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:grocery_app/utils/constants/globle_variable.dart';
/// Hides soft keyboard if already shown
///
enum SnackType {
success,
alert,
error
}
void hideKeyBoard() {
FocusManager.instance.primaryFocus?.unfocus();
}
/// Show snackbar
void showSnackBar(
{ BuildContext ?context,
required String message,
SnackType snackType = SnackType.success,
bool canDismiss = true,
bool sticky = false,
SnackBarBehavior behaviour = SnackBarBehavior.floating,
}) {
//if (!context?.mounted??) return;
//Clear snack bars
ScaffoldMessenger.of(context??GlobalVariable.globalScaffoldKey.currentContext!).clearSnackBars();
// Snack bar
final snackBar = SnackBar(
behavior: behaviour,
padding: EdgeInsets.zero,
elevation: 0,
content: Container(
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 8.h),
decoration: BoxDecoration(
gradient: LinearGradient(
colors:snackType==SnackType.success? const [
Color(0xFF61B15A),
Color(0xFF6ABE8B)
]:snackType==SnackType.alert?
const [
Color(0xFFFF8906),
Color(0xFFFFA745),
]:
const [
Colors.red,
Colors.redAccent,
],
),
),
child: Text(
message,
textAlign: TextAlign.center,
),
),
duration: sticky ? const Duration(days: 365) : const Duration(seconds: 3),
dismissDirection:
canDismiss ? DismissDirection.down : DismissDirection.none,
);
// Find the ScaffoldMessenger in the widget tree
// and use it to show a SnackBar.
ScaffoldMessenger.of(context??GlobalVariable.globalScaffoldKey.currentContext!).showSnackBar(snackBar);
}

View File

@@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
String dateFormatter = 'MMMM dd, y';
extension DateHelper on DateTime
{
String formatDate() {
final formatter = DateFormat(dateFormatter);
return formatter.format(this);
}
bool isSameDate(DateTime other) {
return year == other.year && month == other.month && day == other.day;
}
int getDifferenceInDaysWithNow() {
final now = DateTime.now();
return now.difference(this).inDays;
}
}
extension TimeOfDayExt on TimeOfDay {
/// note: 'hour' is in 24-hour format
double toDouble() => hour + minute / 60.0;
}

View File

@@ -0,0 +1,54 @@
import 'package:flutter/material.dart';
import 'package:grocery_app/utils/constants/color_constant.dart';
extension CommonInputDecoration on InputDecoration {
InputDecoration customRoundedTextFieldDecoration(String hint, Widget? prefix, Widget? suffix, TextStyle hintStyle) {
var returnResult = InputDecoration(
hintText: hint,
labelText: hint,
alignLabelWithHint: false,
suffixIcon: suffix,
suffixIconConstraints: const BoxConstraints(minWidth: 25, maxWidth: 25, maxHeight: 25, minHeight: 25),
contentPadding: const EdgeInsets.only(top: 10, right: 10, bottom: 10, left: 10),
prefix: prefix,
constraints: const BoxConstraints(maxHeight: 60, minHeight: 60),
floatingLabelBehavior: FloatingLabelBehavior.never,
labelStyle: hintStyle,
hintStyle: hintStyle,
isCollapsed: true,
fillColor: APPCOLOR.whiteFBFEFB,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
borderSide: BorderSide(
color: APPCOLOR.borderColor.withOpacity(0.4),
),
),
counterText: "",
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
borderSide: BorderSide(
color: APPCOLOR.borderColor.withOpacity(0.4),
),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
borderSide: const BorderSide(
color: Colors.red,
),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
borderSide: BorderSide(
color: APPCOLOR.borderColor.withOpacity(0.4),
),
),
disabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
borderSide: BorderSide(
color: APPCOLOR.borderColor.withOpacity(0.4),
),
),
);
return returnResult;
}
}

View File

@@ -0,0 +1,338 @@
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;
}

View File

@@ -0,0 +1,49 @@
// ignore_for_file: file_names
import 'package:flutter/material.dart';
extension CustomUITheme on BuildContext {
TextStyle customLight(Color color, double fontSize) {
return TextStyle(fontWeight: FontWeight.w300, color: color, fontSize: fontSize, fontFamily: 'Nunito');
}
TextStyle customBold(Color color, double fontSize) {
return TextStyle(fontWeight: FontWeight.w700, color: color, fontSize: fontSize, fontFamily: 'Nunito');
}
TextStyle customRegular(Color color, double fontSize) {
return TextStyle(fontWeight: FontWeight.w400, color: color, fontSize: fontSize, fontFamily: 'Nunito');
}
TextStyle customMedium(Color color, double fontSize) {
return TextStyle(fontWeight: FontWeight.w500, color: color, fontSize: fontSize, fontFamily: 'Nunito');
}
TextStyle customSemiBold(Color color, double fontSize) {
return TextStyle(fontWeight: FontWeight.w600, color: color, fontSize: fontSize, fontFamily: 'Nunito');
}
TextStyle customExtraBold(Color color, double fontSize) {
return TextStyle(fontWeight: FontWeight.w800, color: color, fontSize: fontSize, fontFamily: 'Nunito');
}
double screenWidth() {
return MediaQuery.sizeOf(this).width;
}
double screenHeight() {
return MediaQuery.sizeOf(this).height;
}
EdgeInsets get bodyPadding {
return const EdgeInsets.only(left: 15, right: 15);
}
EdgeInsets get bodyLeftOnly {
return const EdgeInsets.only(left: 15);
}
EdgeInsets get bodyAllPadding {
return const EdgeInsets.all(15);
}
}