import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; import 'package:loading_indicator/loading_indicator.dart'; import '../../themes/app_dimension.dart'; import '../../themes/app_colors.dart'; import '../../themes/styles_text.dart'; import '../models/item_dropdown.dart'; import 'dialog_widget.dart'; class UtilWidget { static void showLoading() { if (Get.isDialogOpen!) Get.back(); Get.dialog( Center( child: Container( width: 60.w, height: 60.h, decoration: BoxDecoration( color: Colors.transparent, borderRadius: BorderRadius.circular(8), ), child: LoadingIndicator( indicatorType: Indicator.ballClipRotate, colors: [ AppColors.primary1, ], ), ), ), barrierDismissible: false, ); } static void hideLoading() { if (Get.isDialogOpen!) Get.back(); } static void hideDialog() { if (Get.isDialogOpen!) Get.back(); } static void showAlertConfirm({ required BuildContext context, required String icon, required String title, required String message, required String confirmTitle, required Function onPressedConfirm, Function? onPressedCancel, String? cancelTitle, Function? onPressedOther, String? otherTitle, Color? colorConfirmButton, }) { showDialog( context: context, barrierDismissible: true, builder: (BuildContext context) { return Dialog( insetPadding: EdgeInsets.all(10.r), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0)), child: DialogWidget( icon: icon, title: title, message: message, confirmTitle: confirmTitle, onPressedConfirm: onPressedConfirm, cancelTitle: cancelTitle, onPressedCancel: onPressedCancel, otherTitle: otherTitle, onPressedOther: onPressedOther, colorConfirmButton: colorConfirmButton, ), ); }, ); } static void showPicker({ required BuildContext context, required Map values, required Function(int) onCallback, required int initIndex, }) { showModalBottomSheet( context: context, builder: (BuildContext context) { return Container( width: Get.width.w, height: 200.h, child: CupertinoPicker( scrollController: FixedExtentScrollController( initialItem: initIndex, ), backgroundColor: Colors.white, onSelectedItemChanged: (value) { onCallback(value); }, itemExtent: 28.0.h, children: values.entries.map( (e) { return Text(e.value); }, ).toList(), ), ); }, ); } static void showBottomSheet({ required BuildContext context, required List dataSources, required Function(int) onSelected, required FixedExtentScrollController controller, }) { showModalBottomSheet( context: context, builder: (context) { return Container( padding: EdgeInsets.symmetric( vertical: 10.h, horizontal: 20.w, ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( onTap: () { Get.back(); }, child: Text( 'Huỷ', style: StylesText.body2.copyWith( color: AppColors.neutral2, ), ), ), InkWell( onTap: () { Get.back(); onSelected(controller.selectedItem); }, child: Text( 'Chọn', style: StylesText.body2, ), ) ], ), Row( mainAxisSize: MainAxisSize.min, children: [ Expanded( child: Container( height: 302.h, child: CupertinoPicker( magnification: 1.22, squeeze: 1.2, useMagnifier: true, itemExtent: 32.h, scrollController: controller, onSelectedItemChanged: (int selectedItem) {}, children: List.generate(dataSources.length, (index) { return Center( child: Text( dataSources[index].value ?? '', style: StylesText.body6, ), ); }), ), ), ), ], ), ], ), ); }); } static void showNormalToast(String message) { Fluttertoast.cancel(); Fluttertoast.showToast(msg: message); } static void showToastError(String message) { Fluttertoast.cancel(); Fluttertoast.showToast( msg: message, backgroundColor: Colors.red, textColor: Colors.white, ); } static void showToastWarning(String message) { Fluttertoast.cancel(); Fluttertoast.showToast( msg: message, backgroundColor: Colors.orange[400], textColor: Colors.white, ); } static void showToastSuccess(String message) { Fluttertoast.cancel(); Fluttertoast.showToast( msg: message, backgroundColor: AppColors.primary1, textColor: Colors.white, ); } static void showCustomDialog({ required BuildContext context, required Widget content, bool? isDismissible, Function()? onCloseDialog, }) { showDialog( context: context, barrierDismissible: isDismissible ?? true, builder: (BuildContext context) { return Dialog( insetPadding: const EdgeInsets.all(2), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), child: Stack( children: [ Container( margin: const EdgeInsets.only( top: 4, left: 4, right: 4, bottom: 4, ), child: content, ), Positioned( top: -10, right: -10, child: Material( color: Colors.transparent, child: IconButton( icon: Icon( Icons.highlight_off, size: 30, color: AppColors.black, ), onPressed: onCloseDialog ?? () { Get.back(); }, ), ), ), ], ), ); }, ); } }