- Implemented ExpenseByStatusWidget to display expenses categorized by status. - Added ExpenseReportResponse, ExpenseTypeReportResponse, and related models for handling expense data. - Introduced Skeleton loaders for expense status and charts for better UI experience during data loading. - Updated DashboardScreen to include the new ExpenseByStatusWidget and ensure proper integration with existing components.
93 lines
2.8 KiB
Dart
93 lines
2.8 KiB
Dart
import 'package:intl/intl.dart';
|
|
import 'package:marco/helpers/extensions/date_time_extension.dart';
|
|
|
|
class Utils {
|
|
static getDateStringFromDateTime(DateTime dateTime,
|
|
{bool showMonthShort = false}) {
|
|
String date =
|
|
dateTime.day < 10 ? "0${dateTime.day}" : dateTime.day.toString();
|
|
late String month;
|
|
if (showMonthShort) {
|
|
month = dateTime.getMonthName();
|
|
} else {
|
|
month = dateTime.month < 10
|
|
? "0${dateTime.month}"
|
|
: dateTime.month.toString();
|
|
}
|
|
|
|
String year = dateTime.year.toString();
|
|
String separator = showMonthShort ? " " : "/";
|
|
return "$date$separator$month$separator$year";
|
|
}
|
|
|
|
static getTimeStringFromDateTime(
|
|
DateTime dateTime, {
|
|
bool showSecond = true,
|
|
}) {
|
|
String hour = dateTime.hour.toString();
|
|
if (dateTime.hour > 12) {
|
|
hour = (dateTime.hour - 12).toString();
|
|
}
|
|
|
|
String minute = dateTime.minute < 10
|
|
? "0${dateTime.minute}"
|
|
: dateTime.minute.toString();
|
|
String second = "";
|
|
|
|
if (showSecond) {
|
|
second = dateTime.second < 10
|
|
? "0${dateTime.second}"
|
|
: dateTime.second.toString();
|
|
}
|
|
String meridian = "";
|
|
meridian = dateTime.hour < 12 ? " AM" : " PM";
|
|
|
|
return "$hour:$minute${showSecond ? ":" : ""}$second$meridian";
|
|
}
|
|
|
|
static String formatDate(DateTime date) {
|
|
return DateFormat('d MMM yyyy').format(date);
|
|
}
|
|
|
|
static String getDateTimeStringFromDateTime(DateTime dateTime,
|
|
{bool showSecond = true,
|
|
bool showDate = true,
|
|
bool showTime = true,
|
|
bool showMonthShort = false}) {
|
|
if (showDate && !showTime) {
|
|
return getDateStringFromDateTime(dateTime);
|
|
} else if (!showDate && showTime) {
|
|
return getTimeStringFromDateTime(dateTime, showSecond: showSecond);
|
|
}
|
|
return "${getDateStringFromDateTime(dateTime, showMonthShort: showMonthShort)} ${getTimeStringFromDateTime(dateTime, showSecond: showSecond)}";
|
|
}
|
|
|
|
static String getStorageStringFromByte(int bytes) {
|
|
double b = bytes.toDouble(); //1024
|
|
double k = bytes / 1024; //1
|
|
double m = k / 1024; //0.001
|
|
double g = m / 1024; //...
|
|
double t = g / 1024; //...
|
|
|
|
if (t >= 1) {
|
|
return "${t.toStringAsFixed(2)} TB";
|
|
} else if (g >= 1) {
|
|
return "${g.toStringAsFixed(2)} GB";
|
|
} else if (m >= 1) {
|
|
return "${m.toStringAsFixed(2)} MB";
|
|
} else if (k >= 1) {
|
|
return "${k.toStringAsFixed(2)} KB";
|
|
} else {
|
|
return "${b.toStringAsFixed(2)} Bytes";
|
|
}
|
|
}
|
|
|
|
static String formatCurrency(num amount,
|
|
{String currency = "INR", String locale = "en_US"}) {
|
|
// Use en_US for standard K, M, B formatting
|
|
final symbol = NumberFormat.simpleCurrency(name: currency).currencySymbol;
|
|
final formatter = NumberFormat.compact(locale: 'en_US');
|
|
return "$symbol${formatter.format(amount)}";
|
|
}
|
|
}
|