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.
HMG_Patient_App_New/lib/extensions/widget_extensions.dart

254 lines
8.1 KiB
Dart

import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:hmg_patient_app_new/extensions/int_extensions.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:shimmer/shimmer.dart';
import 'package:sizer/sizer.dart';
import 'package:smooth_corner/smooth_corner.dart';
extension WidgetExtensions on Widget {
Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this);
Widget get expanded => Expanded(child: this);
Widget get center => Center(child: this);
Widget circle(double _value) => ClipRRect(borderRadius: BorderRadius.circular(_value), child: this);
Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this);
Widget paddingSymmetrical(double horizontal, double vertical) => Padding(padding: EdgeInsets.symmetric(horizontal: horizontal, vertical: vertical), child: this);
Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) =>
Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this);
Widget toExpanded({int flex = 1}) => Expanded(flex: flex, child: this);
Widget toShimmer({bool isShow = true, bool isTransparent = false}) => isShow
? Shimmer.fromColors(
baseColor: Color(0xffb9bebe),
highlightColor: Colors.white,
child: Container(
color: isTransparent ? Colors.transparent : Colors.white.withOpacity(0.3),
child: this,
),
)
: Container(
child: this,
);
Widget toShimmer2({bool isShow = true, double radius = 20, double? width, double? height}) => isShow
? Shimmer.fromColors(
baseColor: const Color(0xffe8eff0),
highlightColor: Colors.white,
child: ClipRRect(
borderRadius: BorderRadius.circular(radius),
child: Container(
width: width,
height: height,
color: Colors.white,
child: this,
),
),
)
: this;
Widget animatedSwither() => AnimatedSwitcher(
duration: const Duration(milliseconds: 500),
// transitionBuilder: (Widget child, Animation<double> animation) {
// return ScaleTransition(scale: animation, child: child);
// },
switchInCurve: Curves.linearToEaseOut,
switchOutCurve: Curves.linearToEaseOut,
child: this,
);
Widget objectContainerView({String title = "", String note = "", bool disablePadding = false, double radius = 15}) {
return Container(
padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(radius),
boxShadow: [
BoxShadow(
color: const Color(0xff000000).withOpacity(.15),
blurRadius: 26,
offset: const Offset(0, -3),
),
],
),
alignment: Alignment.center,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
if (title.isNotEmpty) title.toText16(),
if (title.isNotEmpty) 12.height,
this,
if (note.isNotEmpty) note.toText11(),
],
),
);
}
Widget objectContainerBorderView(
{String title = "",
String note = "",
bool disablePadding = false,
double radius = 20,
Color? color,
Color borderColor = AppColors.buttonColor,
bool disableWidth = false,
bool isAlignment = false}) {
return Container(
padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(radius),
),
color: color,
border: Border.all(
color: borderColor,
width: disableWidth ? 2 : 1,
),
),
alignment: isAlignment ? Alignment.center : null,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
if (title.isNotEmpty) title.toText16(),
if (title.isNotEmpty) 12.height,
this,
if (note.isNotEmpty) note.toText11(),
],
),
);
}
Widget withHorizontalPadding([double padding = 16.0]) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: padding),
child: this,
);
}
Widget withVerticalPadding([double padding = 16.0]) {
return Padding(
padding: EdgeInsets.symmetric(vertical: padding),
child: this,
);
}
}
extension SmoothContainerExtension on ShapeBorder {
ShapeDecoration toSmoothCornerDecoration({
Color color = Colors.transparent,
double? borderRadius,
bool isDisabled = false,
Color? backgroundColor,
BorderSide? side,
BorderRadius? customBorder,
bool hasShadow = false,
}) {
final bgColor = backgroundColor ?? color;
return ShapeDecoration(
color: isDisabled ? bgColor.withOpacity(0.5) : bgColor,
shape: SmoothRectangleBorder(
borderRadius: customBorder ?? BorderRadius.circular(borderRadius ?? 0),
smoothness: 1,
side: side ?? BorderSide.none,
),
shadows: hasShadow
? [
BoxShadow(
color: const Color(0xff000000).withOpacity(.05),
blurRadius: 32,
offset: const Offset(0, 0),
)
]
: [],
);
}
}
//Height Spacers in percentages
Widget heightSpacer02per() => SizedBox(height: 0.2.h);
Widget heightSpacer04per() => SizedBox(height: 0.4.h);
Widget heightSpacer06per() => SizedBox(height: 0.6.h);
Widget heightSpacer08per() => SizedBox(height: 0.8.h);
Widget heightSpacer1per() => SizedBox(height: 1.h);
Widget heightSpacer2per() => SizedBox(height: 2.h);
Widget heightSpacer3per() => SizedBox(height: 3.h);
Widget heightSpacer4per() => SizedBox(height: 4.h);
Widget heightSpacer5per() => SizedBox(height: 5.h);
Widget heightSpacer8per() => SizedBox(height: 8.h);
Widget heightSpacer10per() => SizedBox(height: 10.h);
Widget heightSpacer15per() => SizedBox(height: 15.h);
Widget heightSpacer20per() => SizedBox(height: 20.h);
//Width Spacers in percentages
Widget widthSpacer02perc() => SizedBox(height: 0.2.w);
Widget widthSpacer04perc() => SizedBox(height: 0.4.w);
Widget widthSpacer06perc() => SizedBox(height: 0.6.w);
Widget widthSpacer08per() => SizedBox(height: 0.8.w);
Widget widthSpacer1per() => SizedBox(height: 1.w);
Widget widthSpacer2per() => SizedBox(height: 2.w);
Widget widthSpacer3per() => SizedBox(height: 3.w);
Widget widthSpacer4per() => SizedBox(height: 4.w);
Widget widthSpacer5per() => SizedBox(height: 5.w);
extension ChipTypeEnumExtension on ChipTypeEnum {
Color get color {
switch (this) {
case ChipTypeEnum.success:
return AppColors.successColor; // Replace with your actual color
case ChipTypeEnum.error:
return AppColors.errorColor; // Replace with your actual color
case ChipTypeEnum.alert:
return AppColors.alertColor; // Replace with your actual color
case ChipTypeEnum.info:
return AppColors.infoColor; // Replace with your actual color
case ChipTypeEnum.warning:
return AppColors.warningColor; // Replace with your actual color
}
}
Color get backgroundColor {
switch (this) {
case ChipTypeEnum.success:
return AppColors.successLightColor; // Replace with your actual color
case ChipTypeEnum.error:
return AppColors.errorLightColor; // Replace with your actual color
case ChipTypeEnum.alert:
return AppColors.alertLightColor; // Replace with your actual color
case ChipTypeEnum.info:
return AppColors.infoLightColor; // Replace with your actual color
case ChipTypeEnum.warning:
return AppColors.warningLightColor; // Replace with your actual color
}
}
}