From f2ccd5ef26a1e5a4bb9485c01e56e24ddc085f10 Mon Sep 17 00:00:00 2001 From: "mirza.shafique" Date: Tue, 28 Mar 2023 11:12:44 +0300 Subject: [PATCH] Common Update 1.0 --- assets/icons/ic_edit.svg | 3 + lib/classes/consts.dart | 2 +- lib/extensions/string_extensions.dart | 17 +++- lib/theme/colors.dart | 2 +- lib/views/user/change_email_page.dart | 2 +- lib/views/user/change_mobile_page.dart | 2 +- lib/views/user/change_password_page.dart | 2 +- lib/views/user/complete_profile_page.dart | 2 +- lib/views/user/confirm_new_password.dart | 2 +- lib/views/user/confirm_new_password_page.dart | 10 +- lib/views/user/forget_password_page.dart | 2 +- lib/views/user/login_with_password_page.dart | 2 +- lib/views/user/register_page.dart | 2 +- lib/views/user/register_provider_page.dart | 2 +- lib/views/user/register_selection_page.dart | 2 +- .../{ => button}/show_card_buttton.dart | 2 +- .../{ => button}/show_fill_button.dart | 29 +++--- lib/widgets/common_widgets/ad_widget.dart | 1 - lib/widgets/common_widgets/app_bar.dart | 94 ++++++++++++------- lib/widgets/dialog/message_dialog.dart | 2 +- lib/widgets/dialog/otp_dialog.dart | 2 +- lib/widgets/extensions/extensions_widget.dart | 59 +++++++----- lib/widgets/tab/menu_tabs.dart | 64 +++++++++++++ 23 files changed, 214 insertions(+), 93 deletions(-) create mode 100644 assets/icons/ic_edit.svg rename lib/widgets/{ => button}/show_card_buttton.dart (90%) rename lib/widgets/{ => button}/show_fill_button.dart (71%) create mode 100644 lib/widgets/tab/menu_tabs.dart diff --git a/assets/icons/ic_edit.svg b/assets/icons/ic_edit.svg new file mode 100644 index 0000000..f99c722 --- /dev/null +++ b/assets/icons/ic_edit.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 972c57c..1e040cd 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -100,7 +100,7 @@ class MyAssets { static String bcIntro = "${assetPath}images/bc_intro.svg"; static String bnLogo = "${assetPath}images/bn_logo.svg"; static String icCar = "${assetPath}images/ic_car.svg"; - static String icEdit = "${assetPath}images/ic_edit.svg"; + static String icEdit = "${assetPath}icons/ic_edit.svg"; static String icEmail = "${assetPath}images/ic_email.svg"; static String icLock = "${assetPath}images/ic_lock.svg"; static String icLogout = "${assetPath}images/ic_logout.svg"; diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index ac17df6..f899df1 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -1,13 +1,23 @@ - import 'package:flutter/cupertino.dart'; import 'package:intl/intl.dart'; import 'package:mc_common_app/theme/colors.dart'; +import 'package:auto_size_text/auto_size_text.dart'; extension EmailValidator on String { - Widget toText({Color? color, bool isBold = false, double? fontSize, bool isUnderLine = false, TextDecoration? textDecoration, double letterSpacing = -0.4, TextAlign? textAlign, double? height}) => - Text( + Widget toText( + {Color? color, + bool isBold = false, + double? fontSize, + bool isUnderLine = false, + TextDecoration? textDecoration, + double letterSpacing = -0.4, + TextAlign? textAlign, + double? height, + int? maxLines}) => + AutoSizeText( this, textAlign: textAlign, + maxLines: maxLines, style: TextStyle( height: height, decoration: isUnderLine ? TextDecoration.underline : textDecoration ?? TextDecoration.none, @@ -18,7 +28,6 @@ extension EmailValidator on String { ), ); - bool isValidEmail() { return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this); } diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index b48a406..8eb2538 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -6,10 +6,10 @@ class MyColors { static const Color accentColor = Colors.blue; static const Color lightTextColor = Color(0xff969696); static const Color textColor = Color(0xff777777); + static const Color darkTextColor = Color(0xff28323A); static const Color textFieldColor = Color(0xffF3F5F7); static const Color darkIconColor = Color(0xff28323A); static const Color lightIconColor = Color(0xff767676); - static const Color darkTextColor = Color(0xff2B353E); static const Color normalTextColor = Color(0xff5A5A5A); static const Color gradiantStartColor = Color(0xff33c0a5); static const Color gradiantEndColor = Color(0xff259db7); diff --git a/lib/views/user/change_email_page.dart b/lib/views/user/change_email_page.dart index ad85777..7eee14a 100644 --- a/lib/views/user/change_email_page.dart +++ b/lib/views/user/change_email_page.dart @@ -3,7 +3,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/user/change_mobile_page.dart b/lib/views/user/change_mobile_page.dart index 3c66c81..06cd26a 100644 --- a/lib/views/user/change_mobile_page.dart +++ b/lib/views/user/change_mobile_page.dart @@ -3,7 +3,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/user/change_password_page.dart b/lib/views/user/change_password_page.dart index 9709867..45c8223 100644 --- a/lib/views/user/change_password_page.dart +++ b/lib/views/user/change_password_page.dart @@ -3,7 +3,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/user/complete_profile_page.dart b/lib/views/user/complete_profile_page.dart index 562c7d6..af11e10 100644 --- a/lib/views/user/complete_profile_page.dart +++ b/lib/views/user/complete_profile_page.dart @@ -5,7 +5,7 @@ import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/models/user/register_user.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/user/confirm_new_password.dart b/lib/views/user/confirm_new_password.dart index ef5a754..b676e45 100644 --- a/lib/views/user/confirm_new_password.dart +++ b/lib/views/user/confirm_new_password.dart @@ -4,7 +4,7 @@ import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; diff --git a/lib/views/user/confirm_new_password_page.dart b/lib/views/user/confirm_new_password_page.dart index ac3287f..94032a6 100644 --- a/lib/views/user/confirm_new_password_page.dart +++ b/lib/views/user/confirm_new_password_page.dart @@ -4,7 +4,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -26,7 +26,7 @@ class _ConfirmNewPasswordPageState extends State { Widget build(BuildContext context) { UserVM userVM = context.read(); return Scaffold( - appBar: CustomAppBar( isRemoveBackButton: true, title: LocaleKeys.forgetPassword.tr()), + appBar: CustomAppBar(isRemoveBackButton: true, title: LocaleKeys.forgetPassword.tr()), body: SingleChildScrollView( child: Container( // width: double.infinity, @@ -34,7 +34,11 @@ class _ConfirmNewPasswordPageState extends State { padding: const EdgeInsets.all(40), child: Column( children: [ - LocaleKeys.newPassword.tr().toText(height: 23 / 24, fontSize: 24, letterSpacing: -1.44,), + LocaleKeys.newPassword.tr().toText( + height: 23 / 24, + fontSize: 24, + letterSpacing: -1.44, + ), 12.height, TextFormField( decoration: InputDecoration( diff --git a/lib/views/user/forget_password_page.dart b/lib/views/user/forget_password_page.dart index fedc92d..8bb9a7a 100644 --- a/lib/views/user/forget_password_page.dart +++ b/lib/views/user/forget_password_page.dart @@ -8,7 +8,7 @@ import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/tab/login_email_tab.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/views/user/login_with_password_page.dart b/lib/views/user/login_with_password_page.dart index 5701025..0009ed9 100644 --- a/lib/views/user/login_with_password_page.dart +++ b/lib/views/user/login_with_password_page.dart @@ -10,7 +10,7 @@ import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/tab/login_email_tab.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; diff --git a/lib/views/user/register_page.dart b/lib/views/user/register_page.dart index 74f0286..25411cf 100644 --- a/lib/views/user/register_page.dart +++ b/lib/views/user/register_page.dart @@ -6,7 +6,7 @@ import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; diff --git a/lib/views/user/register_provider_page.dart b/lib/views/user/register_provider_page.dart index 9dbb229..4a416fa 100644 --- a/lib/views/user/register_provider_page.dart +++ b/lib/views/user/register_provider_page.dart @@ -10,7 +10,7 @@ import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/widgets/tab/role_type_tab.dart'; diff --git a/lib/views/user/register_selection_page.dart b/lib/views/user/register_selection_page.dart index 7716fd5..b819294 100644 --- a/lib/views/user/register_selection_page.dart +++ b/lib/views/user/register_selection_page.dart @@ -8,7 +8,7 @@ import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/utils.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; diff --git a/lib/widgets/show_card_buttton.dart b/lib/widgets/button/show_card_buttton.dart similarity index 90% rename from lib/widgets/show_card_buttton.dart rename to lib/widgets/button/show_card_buttton.dart index 34be3bd..14e9d70 100644 --- a/lib/widgets/show_card_buttton.dart +++ b/lib/widgets/button/show_card_buttton.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; class ShowCardButton extends StatelessWidget { String title; diff --git a/lib/widgets/show_fill_button.dart b/lib/widgets/button/show_fill_button.dart similarity index 71% rename from lib/widgets/show_fill_button.dart rename to lib/widgets/button/show_fill_button.dart index b391be7..13cd8de 100644 --- a/lib/widgets/show_fill_button.dart +++ b/lib/widgets/button/show_fill_button.dart @@ -1,8 +1,7 @@ - import 'package:flutter/material.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; -import '../theme/colors.dart'; +import '../../theme/colors.dart'; class ShowFillButton extends StatelessWidget { String title; @@ -10,6 +9,7 @@ class ShowFillButton extends StatelessWidget { Color txtColor; double elevation, radius, maxWidth, maxHeight, fontSize, horizontalPadding, horizontalMargin, verticalMargin; bool isFlatButton, isBold; + EdgeInsets? margin; ShowFillButton({ required this.title, @@ -25,6 +25,7 @@ class ShowFillButton extends StatelessWidget { this.isBold = true, this.horizontalMargin = 0, this.verticalMargin = 0, + this.margin, }); @override @@ -38,31 +39,35 @@ class ShowFillButton extends StatelessWidget { right: 20, ), ) - : ConstrainedBox( - constraints: BoxConstraints( - minHeight: maxHeight, - minWidth: maxWidth, - maxHeight: maxHeight, - maxWidth: maxWidth, + : Padding( + padding: margin ?? const EdgeInsets.all(0.0), + child: ConstrainedBox( + constraints: BoxConstraints( + minHeight: maxHeight, + minWidth: maxWidth, + maxHeight: maxHeight, + maxWidth: maxWidth, + ), + child: showButton(), ), - child: showButton(), ); } Widget showButton() { return Container( // decoration: isFlatButton ? null : MyColors.gradientButton, - color:isFlatButton ? null : MyColors.darkPrimaryColor, + color: isFlatButton ? null : MyColors.darkPrimaryColor, margin: EdgeInsets.symmetric(horizontal: horizontalMargin, vertical: verticalMargin), child: MaterialButton( onPressed: onPressed, - shape: new RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(radius), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(radius), ), child: title.toText( fontSize: fontSize, isBold: isBold, color: txtColor, + maxLines: 1, ), ), ); diff --git a/lib/widgets/common_widgets/ad_widget.dart b/lib/widgets/common_widgets/ad_widget.dart index 07677ea..208789d 100644 --- a/lib/widgets/common_widgets/ad_widget.dart +++ b/lib/widgets/common_widgets/ad_widget.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; diff --git a/lib/widgets/common_widgets/app_bar.dart b/lib/widgets/common_widgets/app_bar.dart index bb41f49..ed766ac 100644 --- a/lib/widgets/common_widgets/app_bar.dart +++ b/lib/widgets/common_widgets/app_bar.dart @@ -72,6 +72,7 @@ class CustomAppBar extends StatelessWidget with PreferredSizeWidget { final String profileImageUrl; final bool isDrawerEnabled; final VoidCallback? onTap; + final double? leadingWidth; const CustomAppBar({ Key? key, @@ -86,45 +87,72 @@ class CustomAppBar extends StatelessWidget with PreferredSizeWidget { this.isTitleCenter, this.titleColor, this.onTap, + this.leadingWidth, }) : super(key: key); @override Widget build(BuildContext context) { - return AppBar( - leadingWidth: 100, - backgroundColor: backgroundColor ?? appBackgroundColor, - elevation: elevation ?? 0, - centerTitle: isTitleCenter ?? true, - leading: isDrawerEnabled - ? InkWell( - onTap: onTap, - child: Row( - children: [ - Image.asset( - profileImageUrl, - width: 34, - height: 34, - fit: BoxFit.fill, - ).toCircle(borderRadius: 100), - 10.width, - SvgPicture.asset(MyAssets.dashboardDrawerIcon), - ], - ).paddingOnly(left: 21), - ) - : isRemoveBackButton - ? null - : IconButton( - icon: const Icon(Icons.arrow_back_ios, color: Colors.black), - onPressed: () => Navigator.of(context).pop(), - ), - iconTheme: IconThemeData( - color: backIconColor ?? Colors.black, //change your color here - ), - actions: actions, - title: (title ?? "").toText(fontSize: 20, isBold: true), + return Column( + children: [ + AppBar( + leadingWidth: leadingWidth??61, + backgroundColor: backgroundColor ?? Colors.white, + elevation: elevation ?? 0, + centerTitle: isTitleCenter ?? true, + leading: isDrawerEnabled + ? InkWell( + onTap: onTap, + child: Row( + children: [ + Image.asset( + profileImageUrl, + width: 34, + height: 34, + fit: BoxFit.fill, + ).toCircle(borderRadius: 100), + 10.width, + SvgPicture.asset(MyAssets.dashboardDrawerIcon), + ], + ).paddingOnly(left: 21), + ) + : isRemoveBackButton + ? null + : Row( + children: [ + 21.width, + IconButton( + icon: const Icon( + Icons.arrow_back_ios, + color: Colors.black, + size: 16, + ), + onPressed: () => onTap??Navigator.of(context).pop(), + ).toContainer( + paddingAll: 0, + borderRadius: 100, + borderColor: MyColors.lightGreyEFColor, + isEnabledBorder: true, + height: 40, + width: 40, + ), + ], + ), + iconTheme: IconThemeData( + color: backIconColor ?? Colors.black, //change your color here + ), + actions: actions, + title: (title ?? "").toText(fontSize: 20, isBold: true), + ), + if (backgroundColor == null) + const Divider( + thickness: 1, + color: MyColors.lightGreyEFColor, + height: 1, + ) + ], ); } @override - Size get preferredSize => const Size.fromHeight(55); + Size get preferredSize => const Size.fromHeight(60); } diff --git a/lib/widgets/dialog/message_dialog.dart b/lib/widgets/dialog/message_dialog.dart index f25c700..5612b9c 100644 --- a/lib/widgets/dialog/message_dialog.dart +++ b/lib/widgets/dialog/message_dialog.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; class MessageDialog extends StatelessWidget { String? title, buttonTitle; diff --git a/lib/widgets/dialog/otp_dialog.dart b/lib/widgets/dialog/otp_dialog.dart index 9a4f898..6f1da1a 100644 --- a/lib/widgets/dialog/otp_dialog.dart +++ b/lib/widgets/dialog/otp_dialog.dart @@ -6,7 +6,7 @@ import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/count_down_timer.dart'; -import 'package:mc_common_app/widgets/show_fill_button.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import '../otp_widget.dart'; diff --git a/lib/widgets/extensions/extensions_widget.dart b/lib/widgets/extensions/extensions_widget.dart index 4cfcd1b..3473834 100644 --- a/lib/widgets/extensions/extensions_widget.dart +++ b/lib/widgets/extensions/extensions_widget.dart @@ -6,7 +6,6 @@ import 'package:mc_common_app/theme/colors.dart'; import 'package:provider/provider.dart'; extension ExtendedText on Widget { - showOverlay({double? width, double? height}) { return Container( width: width ?? double.infinity, @@ -24,21 +23,25 @@ extension ExtendedText on Widget { } extension ContainerExt on Widget { - Widget toWhiteContainer({required double width, required double allPading}) { - return Container( - decoration: const BoxDecoration( - color: MyColors.white, - boxShadow: [ - BoxShadow( - blurRadius: 8, - spreadRadius: 3, - offset: Offset(0, 3), - color: MyColors.greyShadowColor, - ), - ], + Widget toWhiteContainer({required double width, required double allPading, EdgeInsets? margin, VoidCallback? onTap}) { + return InkWell( + onTap: onTap, + child: Container( + decoration: const BoxDecoration( + color: MyColors.white, + boxShadow: [ + BoxShadow( + blurRadius: 8, + spreadRadius: 3, + offset: Offset(0, 3), + color: MyColors.greyShadowColor, + ), + ], + ), + padding: EdgeInsets.all(allPading), + margin: margin, + child: this, ), - padding: EdgeInsets.all(allPading), - child: this, ); } @@ -50,31 +53,39 @@ extension ContainerExt on Widget { // ); // } - Widget toContainer({double borderRadius = 8, + Widget toContainer({ + double borderRadius = 8, double paddingAll = 10, double marginAll = 0, EdgeInsetsGeometry? margin, EdgeInsetsGeometry? padding, Color backgroundColor = Colors.white, bool isShadowEnabled = false, - double? width}) => + bool isEnabledBorder = false, + Color borderColor = Colors.black, + double borderWidget = 1, + double? width, + double? height, + }) => Container( decoration: BoxDecoration( color: backgroundColor, borderRadius: BorderRadius.circular(borderRadius), + border: !isEnabledBorder ? null : Border.all(color: borderColor, width: borderWidget), boxShadow: !isShadowEnabled ? null : [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], ), padding: padding ?? EdgeInsets.all(paddingAll), margin: margin ?? EdgeInsets.all(marginAll), width: width, + height: height, child: this, ); } @@ -200,7 +211,6 @@ extension WidgetExt on Widget { ); } - 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); @@ -328,5 +338,4 @@ extension LocaleSetup on MultiProvider { extension WidgetExtensions on Widget { Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this); - } diff --git a/lib/widgets/tab/menu_tabs.dart b/lib/widgets/tab/menu_tabs.dart new file mode 100644 index 0000000..2a38bef --- /dev/null +++ b/lib/widgets/tab/menu_tabs.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; + +class MenuTabs extends StatefulWidget { + int selectedIndex; + List dropList; + Function(DropValue value) onSelect; + Color? selectedColor; + + + MenuTabs(this.selectedIndex, this.dropList, {required this.onSelect, this.selectedColor}); + + @override + State createState() => _RoleTypeTabState(); +} + +class _RoleTypeTabState extends State { + @override + Widget build(BuildContext context) { + return SizedBox( + width: double.infinity, + height: 35, + child: ListView.separated( + itemBuilder: (context, index) { + return InkWell( + onTap: () { + setState(() { + widget.selectedIndex = index; + widget.onSelect(widget.dropList[index]); + }); + }, + child: Container( + height: 45, + decoration: BoxDecoration( + color: widget.selectedIndex == index ? widget.selectedColor ?? MyColors.darkIconColor : Colors.white, + border: Border.all(color: widget.selectedIndex == index ? widget.selectedColor ?? MyColors.darkIconColor : MyColors.darkPrimaryColor, width: 1.5), + borderRadius: const BorderRadius.all(Radius.circular(0)), + ), + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Center( + child: Text( + widget.dropList[index].value, + style: TextStyle( + color: widget.selectedIndex == index ? MyColors.white : Colors.black, + fontSize: 12, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ); + }, + separatorBuilder: (context, index) { + return 12.width; + }, + padding: const EdgeInsets.symmetric(horizontal: 21), + itemCount: widget.dropList.length, + scrollDirection: Axis.horizontal, + ), + ); + } +}