import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import '../core/constants/app_assets.dart'; import '../core/constants/translation_keys.dart'; import '../core/utils/app_utils.dart'; import '../models/TransactionSubmitRequestModel.dart'; import '../res/app_colors.dart'; import '../res/app_dimensions.dart'; import '../routes/app_pages.dart'; import 'custom_button.dart'; class CustomDialog { /// SuccessFull Dialog...........Transactions static _showBasicDialog(Widget child) { Get.dialog(responsiveWidget(child), barrierDismissible: false); } /// Warning Dialog static showWarningDialog({ //required String title, required String description, // Function()? onTapPositive, required Function() onTapNegative, }) { _showBasicDialog(Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(AppDimensions.radiusCard)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Align( alignment: Directionality.of(Get.context!) == TextDirection.rtl ? Alignment.topLeft : Alignment.topRight, child: GestureDetector( onTap: () { Navigator.of(Get.context!, rootNavigator: true).pop(); }, child: SvgPicture.asset( AppAssets.ic_cross, height: 14, width: 14, ))), Container( height: 40, width: 40, decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(50)), ), child: Stack( children: [ SvgPicture.asset( AppAssets.ic_featured, ), Center( child: SvgPicture.asset( AppAssets.ic_close, height: 6, width: 6, ), ), ], ), ), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textWarning), style: Theme.of(Get.context!).textTheme.titleMedium?.copyWith(color: AppColors.colorDialogBG)), const SizedBox(height: 20), Text(description, style: Theme.of(Get.context!).textTheme.bodyMedium), const SizedBox(height: 20), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ CustomButton( onPressed: () { onTapNegative(); }, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textYes), buttonPadding: const EdgeInsets.symmetric(vertical: 5, horizontal: 30), textStyle: const TextStyle(fontWeight: FontWeight.w600, fontSize: 16, color: AppColors.black), buttonColor: AppColors.colorSkipBtn, sideBorder: const BorderSide(color: AppColors.colorBorderSkipBtn, width: 1.0), ), ], ), ], ), ], ), ), ), ), )); } /// Error Dialog static showErrorDialog({ //required String title, required String description, // Function()? onClosePress, required Function() onTapNegative, }) { _showBasicDialog(Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(AppDimensions.radiusCard)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Align( alignment: Directionality.of(Get.context!) == TextDirection.rtl ? Alignment.topLeft : Alignment.topRight, child: GestureDetector( onTap: () { Navigator.of(Get.context!, rootNavigator: true).pop(); }, child: SvgPicture.asset( AppAssets.ic_cross, height: 14, width: 14, ))), Container( height: 40, width: 40, decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(50)), ), child: Stack( children: [ SvgPicture.asset( AppAssets.ic_featured, ), Center( child: SvgPicture.asset( AppAssets.ic_close, height: 6, width: 6, ), ), ], ), ), const SizedBox(width: 20), Text(TranslationKeys.makeTranslation(TranslationKeys.textError), style: Theme.of(Get.context!).textTheme.titleMedium?.copyWith(color: AppColors.colorDialogBG)), const SizedBox(height: 20), Text(description, style: Theme.of(Get.context!).textTheme.bodyMedium), const SizedBox(height: 20), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ CustomButton( onPressed: () { onTapNegative(); }, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textOK), buttonPadding: const EdgeInsets.symmetric(vertical: 5, horizontal: 30), buttonColor: AppColors.colorButton, //sideBorder: const BorderSide(color: AppColors.colorBorderSkipBtn, width: 1.0), ), ], ), ], ), ], ), ), ), ), )); } /// Success Dialog static showSuccessDialog({ String? title, required String description, required Function() onTapPositive, }) { _showBasicDialog(Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(AppDimensions.radiusCard)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( height: 60, width: 60, padding: const EdgeInsets.only(bottom: 5), decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(50)), ), child: SvgPicture.asset( AppAssets.ic_congratulations, ), ), if (title != null) ...[ Padding( padding: const EdgeInsets.only(top: 8.0), child: Text( title, style: Theme.of(Get.context!).textTheme.titleMedium?.copyWith(color: AppColors.colorGrey800), ), ), const SizedBox(height: 10), ], Text(description, style: Theme.of(Get.context!).textTheme.bodyMedium), const SizedBox(height: 10), Padding( padding: const EdgeInsets.only(left: 80.0, right: 80.0), child: CustomButton( onPressed: () { Navigator.of(Get.context!, rootNavigator: true).pop(); onTapPositive(); }, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textContinue), buttonPadding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), buttonColor: AppColors.colorButton, ), ), ], ), ], ), ), ), ), )); } /// Information Dialog static showInfoDialog({ required String title, required String description, required Function() onTapPositive, }) { _showBasicDialog(Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(AppDimensions.radiusCard)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( height: 40, width: 40, decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(50)), ), child: Stack( children: [ SvgPicture.asset( AppAssets.ic_congratulations, ), Center( child: SvgPicture.asset( AppAssets.ic_correct_icon, height: 22, width: 22, ), ), ], ), ), Padding( padding: const EdgeInsets.only(top: 8.0), child: Text(TranslationKeys.makeTranslation(TranslationKeys.textInform), style: Theme.of(Get.context!).textTheme.titleMedium?.copyWith(color: AppColors.colorDialogBG)), ), const SizedBox(height: 10), Text(description, style: Theme.of(Get.context!).textTheme.bodyMedium), const SizedBox(height: 10), Padding( padding: const EdgeInsets.only(left: 80.0, right: 80.0), child: CustomButton( onPressed: () { onTapPositive(); }, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textContinue), buttonPadding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), buttonColor: AppColors.colorButton, //sideBorder: const BorderSide(color: AppColors.colorBorderSkipBtn, width: 1.0), ), ), ], ), ], ), ), ), ), )); } /// Information Dialog static showLogoutDialog({ required Function() onTapPositive, required Function() onTapNegative, required BuildContext context, }) { _showBasicDialog(Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(AppDimensions.radiusCard)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( height: 60, width: 60, padding: const EdgeInsets.only(bottom: 5), decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(50)), ), child: SvgPicture.asset( AppAssets.ic_congratulations, ), ), Padding( padding: const EdgeInsets.only(top: 8.0), child: Text(TranslationKeys.makeTranslation(TranslationKeys.textLogOut), style: Theme.of(Get.context!).textTheme.titleMedium?.copyWith(color: AppColors.colorDialogBG)), ), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textLogOutContent), style: Theme.of(Get.context!).textTheme.bodyMedium), const SizedBox(height: 10), Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( flex: 1, child: CustomButton( onPressed: onTapNegative, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textCancel), buttonColor: AppColors.red, buttonPadding: const EdgeInsets.symmetric(vertical: 10), ), ), SizedBox(width: 15), Expanded( flex: 1, child: CustomButton( onPressed: onTapPositive, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textOK), buttonColor: AppColors.colorButton, buttonPadding: const EdgeInsets.symmetric(vertical: 10), ), ), ], ), ), ], ), ], ), ), ), ), )); } /// Alert Dialog static showAlertDialog({ required Function() onTapPositive, required Function() onTapNegative, required BuildContext context, }) { _showBasicDialog(Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(AppDimensions.radiusCard)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( height: 60, width: 60, padding: const EdgeInsets.only(bottom: 5), decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(50)), ), child: Image.asset( AppAssets.ic_warning, ), ), Padding( padding: const EdgeInsets.only(top: 8.0), child: Text(TranslationKeys.makeTranslation(TranslationKeys.textWarning), style: Theme.of(Get.context!).textTheme.titleMedium?.copyWith(color: AppColors.colorDialogBG)), ), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textWarningContent), style: Theme.of(Get.context!).textTheme.bodyMedium), const SizedBox(height: 10), Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( flex: 1, child: CustomButton( onPressed: onTapNegative, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textCancel), buttonColor: AppColors.red, buttonPadding: const EdgeInsets.symmetric(vertical: 10), ), ), const SizedBox(width: 15), Expanded( flex: 1, child: CustomButton( onPressed: onTapPositive, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textDelete), buttonColor: AppColors.colorButton, buttonPadding: const EdgeInsets.symmetric(vertical: 10), ), ), ], ), ), ], ), ], ), ), ), ), )); } static showGeneralDialog({ required String title, required String description, required Widget child, }) { _showBasicDialog(child); } static void showTransactionSuccessDialog(BuildContext context, String endingBalance, String exchangeRate, TransactionSubmitRequestModel transactionSubmitRequestModel) { Get.dialog( responsiveWidget( Stack( children: [ Dialog( backgroundColor: Colors.transparent, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Container( decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(10.0)), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20), child: ListView( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, children: [ Image.asset(AppAssets.ic_launcher, height: 80, width: 80), Padding( padding: const EdgeInsets.only(top: 20), child: Align(alignment: Alignment.center, child: Text(TranslationKeys.makeTranslation(TranslationKeys.textSuccess), style: Theme.of(context).textTheme.titleMedium)), ), const SizedBox(height: 15), Padding( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( flex: 3, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(TranslationKeys.makeTranslation(TranslationKeys.textRecipient), style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textMessage), style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textSendingAmount), style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textExchangeRate), style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(TranslationKeys.makeTranslation(TranslationKeys.textEndingBalance), style: Theme.of(context).textTheme.bodySmall), ], ), ), const SizedBox(width: 20), Expanded( flex: 2, child: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text(transactionSubmitRequestModel.crMbmBkmstitle, style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(transactionSubmitRequestModel.otdTrancomment, style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(AppUtils.showAmountWithCurr(transactionSubmitRequestModel.sgtGntramtfc.toString(), transactionSubmitRequestModel.crPcrCurrcode), style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(exchangeRate, style: Theme.of(context).textTheme.bodySmall), const SizedBox(height: 10), Text(endingBalance, style: Theme.of(context).textTheme.bodySmall), ], ), ), ], ), ), const SizedBox(height: 20), Padding( padding: const EdgeInsets.symmetric(horizontal: 80), child: CustomButton( onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Get.offAllNamed(Routes.DASHBOARD_SCREEN); }, buttonText: TranslationKeys.makeTranslation(TranslationKeys.textOK), buttonColor: AppColors.colorButton, buttonPadding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10), ), ), ], ), ), ), ), ), ], ), ), barrierDismissible: false, ); } }