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_QLine/lib/views/common_widgets/app_general_widgets.dart

473 lines
16 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/utilities/enums.dart';
import 'package:hmg_qline/utilities/extensions.dart';
import 'package:hmg_qline/view_models/screen_config_view_model.dart';
import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart';
import 'package:hmg_qline/views/view_helpers/size_config.dart';
import 'package:marquee/marquee.dart';
import 'package:zo_animated_border/zo_animated_border.dart';
Widget getWeatherWidget(ScreenConfigViewModel screenConfigViewModel) {
if (screenConfigViewModel.weathersWidgetModel.maxTemp == null || screenConfigViewModel.weathersWidgetModel.minTemp == null || screenConfigViewModel.weathersWidgetModel.iconPhrase == null) {
return const SizedBox.shrink();
}
return Container(
height: (screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown)
? SizeConfig.getHeightMultiplier() * 2
: SizeConfig.getHeightMultiplier() * 0.9,
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
decoration: AppColors.configWidgetDecoration,
child: Directionality(
textDirection: screenConfigViewModel.globalConfigurationsModel.textDirection,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText(
screenConfigViewModel.globalConfigurationsModel.weatherText,
color: Colors.grey,
fontSize: SizeConfig.getWidthMultiplier() * 2,
fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
AppText(
"${screenConfigViewModel.globalConfigurationsModel.maxText}: ${screenConfigViewModel.weathersWidgetModel.maxTemp}°C , ${screenConfigViewModel.globalConfigurationsModel.minText}: ${screenConfigViewModel.weathersWidgetModel.minTemp}°C",
fontSize: SizeConfig.getWidthMultiplier() * 3,
fontHeight: 1,
fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
],
),
const SizedBox(width: 15),
SvgPicture.asset(
screenConfigViewModel.weathersWidgetModel.weatherIconPath ?? AppAssets.weatherIcon,
height: SizeConfig.getHeightMultiplier() * 0.5,
),
],
),
),
);
}
Widget getPrayerWidget(ScreenConfigViewModel screenConfigViewModel) {
if (screenConfigViewModel.nextPrayerTime.isEmpty) {
return const SizedBox.shrink();
}
return SizedBox(
child: Container(
height: (screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown)
? SizeConfig.getHeightMultiplier() * 2
: SizeConfig.getHeightMultiplier() * 0.9,
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 20),
margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
decoration: AppColors.configWidgetDecoration,
child: Directionality(
textDirection: screenConfigViewModel.globalConfigurationsModel.textDirection,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText(
screenConfigViewModel.globalConfigurationsModel.nextPrayerTextEng,
color: Colors.grey,
fontSize: SizeConfig.getWidthMultiplier() * 1.5,
fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
AppText(
screenConfigViewModel.nextPrayerTime,
fontSize: SizeConfig.getWidthMultiplier() * 2.7,
fontHeight: 1,
fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
],
),
const SizedBox(width: 15),
SvgPicture.asset(
AppAssets.mosqueIcon,
height: SizeConfig.getWidthMultiplier() * 7,
),
],
),
),
),
);
}
int getFlexForScreenTypes(ScreenConfigViewModel screenConfigVM) {
int flex = 1;
if (screenConfigVM.currentScreenTypeEnum == ScreenTypeEnum.roomLevelScreen) {
if (screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) {
flex = 2;
} else {
flex = 3;
}
} else {
if (screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) {
flex = 2;
} else {
flex = 1;
}
}
return flex;
}
Widget counterNoText({required int counterNo, required bool isRoomNoRequired, required String roomText}) {
return AppText(
"$roomText $counterNo",
fontFamily: AppStrings.fontNamePoppins,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
color: isRoomNoRequired ? Colors.black : Colors.transparent,
fontSize: SizeConfig.getWidthMultiplier() * 8,
);
}
Widget intimationWidget({
required String text,
required String fontName,
required String roomText,
required bool isRoomNoRequired,
required bool isForRoomLevel,
required int counterNo,
bool isForError = false,
}) {
Widget noPatientText = Center(
child: AppText(
text,
fontFamily: fontName,
textAlign: TextAlign.center,
fontSize: isForError ? SizeConfig.getWidthMultiplier() * 7 : SizeConfig.getWidthMultiplier() * 9,
),
);
if (isForRoomLevel) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
counterNoText(
counterNo: counterNo,
roomText: roomText,
isRoomNoRequired: isRoomNoRequired,
),
noPatientText,
const SizedBox.shrink()
],
);
} else {
return noPatientText;
}
}
Widget commonSelectionCardKiosk({
required LanguageEnum screenLanguageEnum,
required TextDirection textDirection,
required String title,
required String icon,
required VoidCallback onTap,
}) {
return InkWell(
onTap: onTap,
child: SizedBox(
child: Container(
constraints: BoxConstraints(minWidth: SizeConfig.getWidthMultiplier() * 40),
padding: const EdgeInsets.all(30),
margin: const EdgeInsets.all(10),
decoration: AppColors.configWidgetDecoration,
child: Directionality(
textDirection: textDirection,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(icon, height: SizeConfig.getWidthMultiplier() * 12),
const SizedBox(height: 15),
AppText(
title,
fontSize: SizeConfig.getWidthMultiplier() * 6,
fontHeight: 1,
fontFamily: screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
],
),
),
),
),
);
}
Widget commonShadowButton({
required LanguageEnum screenLanguageEnum,
required TextDirection textDirection,
required String title,
required String icon,
required double fontSize,
required VoidCallback onTap,
}) {
return InkWell(
onTap: onTap,
child: Container(
constraints: BoxConstraints(minWidth: SizeConfig.getWidthMultiplier() * 40),
padding: const EdgeInsets.all(30),
margin: const EdgeInsets.all(10),
decoration: AppColors.configWidgetDecoration,
child: Directionality(
textDirection: textDirection,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (icon.isNotEmpty) ...[
SvgPicture.asset(icon, height: SizeConfig.getWidthMultiplier() * 12),
const SizedBox(height: 15),
],
AppText(
title,
fontSize: fontSize,
fontFamily: screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
],
),
),
),
);
}
Widget customShadowTextField({
required TextEditingController controller,
required String hintText,
required Function(String) onSubmitted,
TextDirection textDirection = TextDirection.ltr,
TextInputType keyboardType = TextInputType.text,
bool obscureText = false,
}) {
return Container(
margin: const EdgeInsets.all(10),
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 8),
decoration: AppColors.configWidgetDecoration,
child: Directionality(
textDirection: textDirection,
child: TextField(
controller: controller,
keyboardType: keyboardType,
obscureText: obscureText,
decoration: InputDecoration(
hintText: hintText,
border: InputBorder.none,
),
style: const TextStyle(fontSize: 16),
onSubmitted: onSubmitted,
),
),
);
}
Widget engArabicTextWithSeparatorWidget({
required String englishText,
required String arabicText,
double? fontSize,
Color? color,
MainAxisAlignment? mainAxisAlignment,
}) {
return Row(
mainAxisAlignment: mainAxisAlignment ?? MainAxisAlignment.start,
children: [
AppText(
englishText,
fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6,
color: color ?? AppColors.darkGreyTextColor,
),
AppText(
" | ",
fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6,
color: color ?? AppColors.darkGreyTextColor,
),
AppText(
arabicText,
color: color ?? AppColors.darkGreyTextColor,
fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6,
fontFamily: AppStrings.fontNameGesTwo,
fontWeight: FontWeight.bold,
),
],
);
}
Widget customShadowSmoothContainer({
EdgeInsetsGeometry? padding,
EdgeInsetsGeometry? margin,
required Widget child,
double? height,
double? width,
}) {
return Container(
padding: padding,
margin: margin,
height: height,
width: width,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.whiteColor,
borderRadius: BorderRadius.circular(SizeConfig.widthMultiplier! * 1.2),
boxShadow: [
BoxShadow(
color: AppColors.smoothContainerShadow,
offset: const Offset(0, 4), // X: 0, Y: 4
blurRadius: 14,
spreadRadius: 0,
),
],
),
child: child,
);
}
Widget customShadowSmoothContainerWithBackground({
EdgeInsetsGeometry? padding,
EdgeInsetsGeometry? margin,
required Widget child,
double? height,
double? width,
CallTypeEnum? callTypeEnum,
}) {
callTypeEnum ??= CallTypeEnum.vitalSign;
List<Color> borderGradientCombo = [];
if (callTypeEnum == CallTypeEnum.vitalSign) {
borderGradientCombo = [
const Color(0xFFFFFFFF), // start
const Color(0xFFF2F3F4),
const Color(0xFFF2F3F4),
const Color(0xFFA5ADB4),
const Color(0xFFA5ADB4),
const Color(0xFF78848F),
];
} else {
borderGradientCombo = [
const Color(0xFFFFFFFF), // start
const Color(0xFFAFEAD4), // start
const Color(0xFFAFEAD4), // start
const Color(0xFF42BB8D), // end
const Color(0xFF42BB8D), // end
const Color(0xFF42BB8D),
];
}
return ZoAnimatedGradientBorder(
animationDuration: const Duration(seconds: 4),
glowOpacity: 0.0,
borderThickness: 8,
gradientColor: borderGradientCombo,
borderRadius: SizeConfig.getWidthMultiplier()! * 1.2,
child: Container(
padding: padding,
margin: margin,
height: height,
width: width,
alignment: Alignment.center,
decoration: BoxDecoration(
gradient: const LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xFFECF1F4), // #ECF1F4 (0deg)
Color(0x71B1B7BC), // rgba(177, 183, 188, 0.445) (90deg)
Color(0x89BEBDC7), // rgba(190, 195, 199, 0.5375) (135deg)
Color(0xA1CBCFD3), // rgba(203, 207, 211, 0.63) (178.66deg)
Color(0xFFE5E7E9), // #E5E7E9 (270deg)
Color(0xFFF2F3F4), // #F2F3F4 (315deg)
Color(0xFFECF1F4), // #ECF1F4 (360deg)
],
stops: [0.0, 0.25, 0.375, 0.496, 0.75, 0.875, 1.0],
),
color: AppColors.whiteColor,
borderRadius: BorderRadius.circular(SizeConfig.getWidthMultiplier()! * 1.2),
boxShadow: [
BoxShadow(
color: AppColors.smoothContainerShadow,
offset: const Offset(0, 4), // X: 0, Y: 4
blurRadius: 14,
spreadRadius: 0,
),
],
),
child: child),
);
}
Widget rssFeedWidget({required String feed}) {
return Expanded(
child: Container(
padding: const EdgeInsets.fromLTRB(10, 30, 10, 0),
child: Marquee(
text: feed,
style: TextStyle(
fontWeight: FontWeight.w400,
fontSize: SizeConfig.getWidthMultiplier() * 2,
fontFamily: AppStrings.fontNamePoppins,
),
scrollAxis: Axis.horizontal,
crossAxisAlignment: CrossAxisAlignment.center,
blankSpace: 20.0,
velocity: 100.0,
pauseAfterRound: const Duration(seconds: 1),
startPadding: 10.0,
accelerationDuration: const Duration(seconds: 1),
accelerationCurve: Curves.linear,
decelerationDuration: const Duration(milliseconds: 500),
decelerationCurve: Curves.easeOut,
),
),
);
}
Widget callTypeContainer({
EdgeInsetsGeometry? padding,
EdgeInsetsGeometry? margin,
required Widget child,
double? height,
double? width,
required Color color,
required TextDirection textDirection,
bool isDisableRightBorderRadius = true,
}) {
final border = SizeConfig.getWidthMultiplier()! * 1;
return Container(
padding: padding,
margin: margin,
height: height,
width: width,
alignment: Alignment.center,
decoration: BoxDecoration(
color: color,
borderRadius: isDisableRightBorderRadius
? textDirection == TextDirection.ltr
? BorderRadius.only(
topLeft: Radius.circular(border),
bottomLeft: Radius.circular(border),
)
: BorderRadius.only(
topRight: Radius.circular(border),
bottomRight: Radius.circular(border),
)
: BorderRadius.circular(border),
boxShadow: [
BoxShadow(
color: AppColors.smoothContainerShadow,
offset: const Offset(0, 4), // X: 0, Y: 4
blurRadius: 14,
spreadRadius: 0,
),
],
),
child: child,
);
}