This repository has been archived on 2024-10-18. You can view files and clone it, but cannot push or open issues or pull requests.
ftc_patient_app/lib/utilities/extensions/custom_extensions.dart

201 lines
5.1 KiB
Dart

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:ftc_mobile_app/view/custom_widgets/loading_widget.dart';
import 'package:get/get.dart';
//BuildContext
extension BuildContextExtensions on BuildContext {
showErrorSnackBar({required String message, Duration? duration}) {
try {
ScaffoldMessenger.of(this).showSnackBar(SnackBar(
content: Text(message),
backgroundColor: Colors.red,
duration: duration ?? const Duration(seconds: 4),
));
} catch (e) {
debugPrint(e.toString());
}
}
}
// num
extension NumExtensions on num {
BorderRadius toRadius() {
return BorderRadius.circular(toDouble().r);
}
RoundedRectangleBorder toRoundedRectRadius() {
return RoundedRectangleBorder(borderRadius: toRadius());
}
num percentOf(num value) {
return value * (this / 100.0);
}
double toRadian() {
return this * pi / 180;
}
double toDegree() {
return this * 180 / pi;
}
double get milesToMeters => this * 1609.344;
double get metersToMiles => this / 1609.344;
}
// string
extension StringExtensions on String? {
bool isNullOrEmpty() {
return (this == null || this!.isEmpty);
}
bool isNullOrEmptyNot() {
return (this != null && this!.isNotEmpty);
}
String removeSpaces() {
return this?.replaceAll(RegExp(r"\s\b|\b\s"), "") ?? "";
}
bool get hasDigitsOnly {
return isNotNullOrEmpty() && RegExp(r'^[0-9]+$').hasMatch(this!);
}
}
// widgets
extension WidgetsExtension on Widget {
// add click
Widget addInkwell({required Function onClick}) {
return InkWell(
child: this,
onTap: () => onClick(),
);
}
// add padding
Widget addPaddingAll(num value) {
return Padding(
padding: REdgeInsets.all(value.toDouble()),
child: this,
);
}
// add horizontal padding
Widget addPaddingHorizontal(num value) {
return Padding(
padding: REdgeInsets.symmetric(horizontal: value.toDouble()),
child: this,
);
}
// add vertical padding
Widget addPaddingVertical(num value) {
return Padding(
padding: REdgeInsets.symmetric(vertical: value.toDouble()),
child: this,
);
}
Widget alignCenterLeft() {
return Align(alignment: Alignment.centerLeft, child: this);
}
Widget alignCenterRight() {
return Align(alignment: Alignment.centerRight, child: this);
}
Widget alignCenter() {
return Align(alignment: Alignment.center, child: this);
}
}
//bool
extension BoolExtensions on bool {
bool get not => !this;
}
//object
extension ObjectExtension on Object? {
bool isNullObject() => this == null;
bool isNotNull() => isNullObject().not;
bool isNullOrEmpty() {
if (this is String) {
return (isNullObject() || (this as String).isEmpty);
} else if (this is List) {
return (isNullObject() || (this as List).isEmpty);
} else {
return isNullObject();
}
}
bool isNotNullOrEmpty() => isNullOrEmpty().not;
}
extension HexColor on Color {
/// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
static Color fromHex(String hexString) {
final buffer = StringBuffer();
if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
buffer.write(hexString.replaceFirst('#', ''));
return Color(int.parse(buffer.toString(), radix: 16));
}
/// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
'${alpha.toRadixString(16).padLeft(2, '0')}'
'${red.toRadixString(16).padLeft(2, '0')}'
'${green.toRadixString(16).padLeft(2, '0')}'
'${blue.toRadixString(16).padLeft(2, '0')}';
}
extension TimeOfDayChecker on TimeOfDay {
bool isBefore(TimeOfDay other) {
// print("now: $hour:$minute");
// print("other: ${other.hour}:${other.minute}");
// final int minutes1 = hour * 60 + minute;
// final int minutes2 = other.hour * 60 + other.minute;
//
// return minutes1 < minutes2;
print("isBefore");
print("now: $hour:$minute");
print("other: ${other.hour}:${other.minute}");
final n = DateTime.now();
final d1 = DateTime(n.year, n.month, n.day, hour, minute);
final d2 = DateTime(n.year, n.month, n.day, other.hour, other.minute);
// final int minutes1 = hour * 60 + minute;
// final int minutes2 = other.hour * 60 + other.minute;
return d1.isBefore(d2);
}
bool isAfter(TimeOfDay other) {
print("isAfter");
print("now: $hour:$minute");
print("other: ${other.hour}:${other.minute}");
final n = DateTime.now();
final d1 = DateTime(n.year, n.month, n.day, hour, minute);
final d2 = DateTime(n.year, n.month, n.day, other.hour, other.minute);
// final int minutes1 = hour * 60 + minute;
// final int minutes2 = other.hour * 60 + other.minute;
return d1.isAfter(d2);
}
}
extension FutureExt<T> on Future<T> {
Future<T> showLoader() {
return Get.showOverlay(
asyncFunction: () async => this,
opacity: 1,
opacityColor: Colors.black.withOpacity(0.5),
loadingWidget: const LoadingWidget(),
);
}
}