diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 857f1d1..472e794 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ + diff --git a/assets/images/add.svg b/assets/images/add.svg new file mode 100644 index 0000000..0230942 --- /dev/null +++ b/assets/images/add.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/announcements.svg b/assets/images/announcements.svg new file mode 100644 index 0000000..d204e60 --- /dev/null +++ b/assets/images/announcements.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/arrow_next.svg b/assets/images/arrow_next.svg new file mode 100644 index 0000000..76de3b9 --- /dev/null +++ b/assets/images/arrow_next.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/clear_field.svg b/assets/images/clear_field.svg new file mode 100644 index 0000000..618ed79 --- /dev/null +++ b/assets/images/clear_field.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/clock.svg b/assets/images/clock.svg new file mode 100644 index 0000000..bc9faed --- /dev/null +++ b/assets/images/clock.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/close.svg b/assets/images/close.svg new file mode 100644 index 0000000..7ef696b --- /dev/null +++ b/assets/images/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/delegate.svg b/assets/images/delegate.svg new file mode 100644 index 0000000..aa2bd7a --- /dev/null +++ b/assets/images/delegate.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/dot_circle.svg b/assets/images/dot_circle.svg new file mode 100644 index 0000000..b3ac566 --- /dev/null +++ b/assets/images/dot_circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/fav.svg b/assets/images/fav.svg new file mode 100644 index 0000000..ebbaf1c --- /dev/null +++ b/assets/images/fav.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/jpg.svg b/assets/images/jpg.svg new file mode 100644 index 0000000..cfda5a7 --- /dev/null +++ b/assets/images/jpg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/verify_face.svg b/assets/images/login/verify_face.svg similarity index 100% rename from assets/images/verify_face.svg rename to assets/images/login/verify_face.svg diff --git a/assets/images/verify_sms.svg b/assets/images/login/verify_sms.svg similarity index 100% rename from assets/images/verify_sms.svg rename to assets/images/login/verify_sms.svg diff --git a/assets/images/verify_thumb.svg b/assets/images/login/verify_thumb.svg similarity index 100% rename from assets/images/verify_thumb.svg rename to assets/images/login/verify_thumb.svg diff --git a/assets/images/verify_whatsapp.svg b/assets/images/login/verify_whatsapp.svg similarity index 100% rename from assets/images/verify_whatsapp.svg rename to assets/images/login/verify_whatsapp.svg diff --git a/assets/images/logos/mohemm_logo.svg b/assets/images/logos/mohemm_logo.svg new file mode 100644 index 0000000..1cb9a0b --- /dev/null +++ b/assets/images/logos/mohemm_logo.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/miss_swipe.svg b/assets/images/miss_swipe.svg new file mode 100644 index 0000000..05d32f2 --- /dev/null +++ b/assets/images/miss_swipe.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/monthly_attendance.svg b/assets/images/monthly_attendance.svg new file mode 100644 index 0000000..c84a9a1 --- /dev/null +++ b/assets/images/monthly_attendance.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/images/more_dotted.svg b/assets/images/more_dotted.svg new file mode 100644 index 0000000..add7848 --- /dev/null +++ b/assets/images/more_dotted.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/nfc.svg b/assets/images/nfc.svg new file mode 100644 index 0000000..aff027e --- /dev/null +++ b/assets/images/nfc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/pdf.svg b/assets/images/pdf.svg new file mode 100644 index 0000000..fc59aea --- /dev/null +++ b/assets/images/pdf.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/png.svg b/assets/images/png.svg new file mode 100644 index 0000000..2a0091d --- /dev/null +++ b/assets/images/png.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/request_info.svg b/assets/images/request_info.svg new file mode 100644 index 0000000..43ac9c1 --- /dev/null +++ b/assets/images/request_info.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/side_nav.svg b/assets/images/side_nav.svg new file mode 100644 index 0000000..a53378f --- /dev/null +++ b/assets/images/side_nav.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/skip.svg b/assets/images/skip.svg new file mode 100644 index 0000000..01831e0 --- /dev/null +++ b/assets/images/skip.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/images/stop.svg b/assets/images/stop.svg new file mode 100644 index 0000000..5f658a8 --- /dev/null +++ b/assets/images/stop.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/images/ticket_request.svg b/assets/images/ticket_request.svg new file mode 100644 index 0000000..f489a8e --- /dev/null +++ b/assets/images/ticket_request.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/un_fav.svg b/assets/images/un_fav.svg new file mode 100644 index 0000000..de1b852 --- /dev/null +++ b/assets/images/un_fav.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/work_from_home.svg b/assets/images/work_from_home.svg new file mode 100644 index 0000000..cf9a8d7 --- /dev/null +++ b/assets/images/work_from_home.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/wufu.svg b/assets/images/wufu.svg new file mode 100644 index 0000000..dd3ebab --- /dev/null +++ b/assets/images/wufu.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/xls.svg b/assets/images/xls.svg new file mode 100644 index 0000000..658ba92 --- /dev/null +++ b/assets/images/xls.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index bfa680d..5419919 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -18,8 +18,29 @@ "useAnotherAccount": "Use Another Account", "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", "theVerificationCodeWillExpireIn": "The verification code will expire in ", - "title": "Hello", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "leaveBalance": "Leave Balance", + "missingSwipes": "Missing Swipes", + "ticketBalance": "Ticket Balance", + "other": "Other", + "services": "Services", + "viewAllServices": "View All Services", + "monthlyAttendance": "Monthly Attendance", + "workFromHome": "Work From Home", + "ticketRequest": "Ticket Request", + "viewAllOffers": "View All Offers", + "offers": "Offers & ", + "discounts": "Discounts", + "title": "Title", + "home": "Home", + "mySalary": "My Salary", + "createRequest": "Create Request", "forgotPassword": "Forgot Password", + "itemsForSale": "Items for Sale", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index bfa680d..5419919 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -18,8 +18,29 @@ "useAnotherAccount": "Use Another Account", "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", "theVerificationCodeWillExpireIn": "The verification code will expire in ", - "title": "Hello", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "leaveBalance": "Leave Balance", + "missingSwipes": "Missing Swipes", + "ticketBalance": "Ticket Balance", + "other": "Other", + "services": "Services", + "viewAllServices": "View All Services", + "monthlyAttendance": "Monthly Attendance", + "workFromHome": "Work From Home", + "ticketRequest": "Ticket Request", + "viewAllOffers": "View All Offers", + "offers": "Offers & ", + "discounts": "Discounts", + "title": "Title", + "home": "Home", + "mySalary": "My Salary", + "createRequest": "Create Request", "forgotPassword": "Forgot Password", + "itemsForSale": "Items for Sale", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index d19edc6..79b0d31 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -3,11 +3,14 @@ import 'package:flutter/cupertino.dart'; class MyColors { static const Color darkIconColor = Color(0xff28323A); static const Color darkTextColor = Color(0xff2B353E); - static const Color gradiantStartColor = Color(0xff32D892); - static const Color gradiantEndColor = Color(0xff259CB8); + static const Color gradiantStartColor = Color(0xff33c0a5); + static const Color gradiantEndColor = Color(0xff259db7 ); static const Color textMixColor = Color(0xff2BB8A6); static const Color backgroundColor = Color(0xffF8F8F8); - static const Color greyColor = Color(0xff575757); + static const Color grey57Color = Color(0xff575757); + static const Color grey77Color = Color(0xff777777); + static const Color grey98Color = Color(0xff989898); static const Color lightGreyColor = Color(0xffEFEFEF); static const Color darkWhiteColor = Color(0xffE0E0E0); + static const Color redColor = Color(0xffD02127); } diff --git a/lib/dialogs/otp_dialog.dart b/lib/dialogs/otp_dialog.dart index 3d625bf..6a14d63 100644 --- a/lib/dialogs/otp_dialog.dart +++ b/lib/dialogs/otp_dialog.dart @@ -102,7 +102,7 @@ class OtpDialog { ], ), 22.height, - (LocaleKeys.pleaseEnterTheVerificationCodeSentTo.tr() + ' xxxxxxxx' + mobileNo.toString().substring(mobileNo.toString().length - 3)).toText16, + (LocaleKeys.pleaseEnterTheVerificationCodeSentTo.tr() + ' xxxxxxxx' + mobileNo.toString().substring(mobileNo.toString().length - 3)).toText16(), 18.height, Directionality( textDirection: TextDirection.ltr, diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index bd52c85..9ba31c8 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -10,24 +10,44 @@ extension EmailValidator on String { style: TextStyle(fontSize: 10, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), ); - Widget toText12({Color? color, bool isUnderLine = false}) => Text( + Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( this, - style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.72, decoration: isUnderLine ? TextDecoration.underline : null), + style: TextStyle( + fontSize: 11, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.33, + decoration: isUnderLine ? TextDecoration.underline : null), ); - Widget get toText14 => Text( + Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( + this, + style: TextStyle( + fontSize: 12, + fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + color: color ?? MyColors.darkTextColor, + letterSpacing: -0.72, + decoration: isUnderLine ? TextDecoration.underline : null), + ); + + Widget toText13({Color? color, bool isUnderLine = false}) => Text( + this, + style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null), + ); + + Widget toText14({Color? color,bool isBold = false}) => Text( this, - style: const TextStyle(color: MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: FontWeight.w600), + style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold :FontWeight.w600), ); - Widget get toText16 => Text( + Widget toText16({Color? color, bool isBold = false}) => Text( this, - style: const TextStyle(color: MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600), + style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); Widget toText24({bool isBold = false}) => Text( this, - style: TextStyle(color: MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + style: TextStyle(height: 23 / 24, color: MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); bool isValidEmail() { diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index c0810e9..0991c28 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -34,8 +34,29 @@ class CodegenLoader extends AssetLoader{ "useAnotherAccount": "Use Another Account", "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", "theVerificationCodeWillExpireIn": "The verification code will expire in ", - "title": "Hello", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "leaveBalance": "Leave Balance", + "missingSwipes": "Missing Swipes", + "ticketBalance": "Ticket Balance", + "other": "Other", + "services": "Services", + "viewAllServices": "View All Services", + "monthlyAttendance": "Monthly Attendance", + "workFromHome": "Work From Home", + "ticketRequest": "Ticket Request", + "viewAllOffers": "View All Offers", + "offers": "Offers & ", + "discounts": "Discounts", + "title": "Title", + "home": "Home", + "mySalary": "My Salary", + "createRequest": "Create Request", "forgotPassword": "Forgot Password", + "itemsForSale": "Items for Sale", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", @@ -92,8 +113,29 @@ static const Map en_US = { "useAnotherAccount": "Use Another Account", "pleaseEnterTheVerificationCodeSentTo": "Please enter the verification code sent to ", "theVerificationCodeWillExpireIn": "The verification code will expire in ", - "title": "Hello", + "goodMorning": "Good Morning", + "markAttendance": "Mark Attendance", + "timeLeftToday": "Time Left Today", + "checkIn": "Check In", + "workList": "Work List", + "leaveBalance": "Leave Balance", + "missingSwipes": "Missing Swipes", + "ticketBalance": "Ticket Balance", + "other": "Other", + "services": "Services", + "viewAllServices": "View All Services", + "monthlyAttendance": "Monthly Attendance", + "workFromHome": "Work From Home", + "ticketRequest": "Ticket Request", + "viewAllOffers": "View All Offers", + "offers": "Offers & ", + "discounts": "Discounts", + "title": "Title", + "home": "Home", + "mySalary": "My Salary", + "createRequest": "Create Request", "forgotPassword": "Forgot Password", + "itemsForSale": "Items for Sale", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", diff --git a/lib/ui/dashboard.dart b/lib/ui/dashboard.dart index f6699ae..65d4cfd 100644 --- a/lib/ui/dashboard.dart +++ b/lib/ui/dashboard.dart @@ -1,4 +1,13 @@ +import 'package:easy_localization/src/public_ext.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; +import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; class Dashboard extends StatefulWidget { Dashboard({Key? key}) : super(key: key); @@ -22,6 +31,245 @@ class _DashboardState extends State { @override Widget build(BuildContext context) { - return Scaffold(); + List names = [LocaleKeys.workList.tr(), LocaleKeys.missingSwipes.tr(), LocaleKeys.leaveBalance.tr(), LocaleKeys.ticketBalance.tr()]; + List namesInt = [118, 02, 18.5, 03]; + List namesColor = [0xff125765, 0xff239D8F, 0xff2BB8A8, 0xff1D92AA]; + + List namesT = [LocaleKeys.monthlyAttendance.tr(), LocaleKeys.workFromHome.tr(), LocaleKeys.ticketRequest.tr(), LocaleKeys.monthlyAttendance.tr()]; + List iconT = ["assets/images/monthly_attendance.svg", "assets/images/work_from_home.svg", "assets/images/ticket_request.svg", "assets/images/work_from_home.svg"]; + + return Scaffold( + body: Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + CircularAvatar( + width: 34, + height: 34, + url: "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png", + ), + 8.width, + SvgPicture.asset("assets/images/side_nav.svg"), + ], + ).onPress(() {}), + Expanded( + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + //AppLogo(), + 8.width, + LocaleKeys.mohemm.tr().toText14() + ], + ), + ), + SizedBox( + width: 36, + height: 36, + child: Stack( + alignment: Alignment.centerLeft, + children: [ + SvgPicture.asset("assets/images/announcements.svg"), + Positioned( + right: 0, + top: 0, + child: Container( + padding: const EdgeInsets.only(left: 5, right: 5), + decoration: BoxDecoration(color: MyColors.redColor, borderRadius: BorderRadius.circular(17)), + child: "3".toText12(color: Colors.white), + ), + ) + ], + ), + ) + ], + ), + 14.height, + LocaleKeys.goodMorning.tr().toText14(color: MyColors.grey77Color), + "Mahmoud Shrouf".toText24(isBold: true), + 16.height, + Row( + children: [ + Expanded( + child: AspectRatio( + aspectRatio: 159 / 159, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + gradient: const LinearGradient(transform: GradientRotation(.46), begin: Alignment.topRight, end: Alignment.bottomRight, colors: [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, + ]), + ), + child: Stack( + alignment: Alignment.center, + children: [ + SvgPicture.asset("assets/images/"), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.markAttendance.tr().toText14(color: Colors.white, isBold: true), + 9.height, + "07:55:12".toText14(color: Colors.white, isBold: true), + LocaleKeys.timeLeftToday.tr().toText12(color: Colors.white), + 9.height, + ClipRRect( + borderRadius: const BorderRadius.all( + Radius.circular(20), + ), + child: LinearProgressIndicator( + value: 0.7, + minHeight: 8, + valueColor: const AlwaysStoppedAnimation(Colors.white), + backgroundColor: const Color(0xff196D73), + ), + ), + ], + ).paddingOnly(top: 12, right: 15, left: 12), + ), + Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [LocaleKeys.checkIn.tr().toText12(color: Colors.white), "09:00".toText14(color: Colors.white, isBold: true), 4.height], + ).paddingOnly(left: 12), + ), + Container( + width: 45, + height: 45, + padding: const EdgeInsets.only(left: 14, right: 14), + decoration: const BoxDecoration( + color: Color(0xff259EA4), + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(15), + ), + ), + child: SvgPicture.asset("assets/images/stop.svg"), + ), + ], + ), + ], + ), + ], + ), + ), + ), + ), + 9.width, + Expanded( + child: GridView.builder( + shrinkWrap: true, + primary: false, + physics: const NeverScrollableScrollPhysics(), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 2 / 2, crossAxisSpacing: 9, mainAxisSpacing: 9), + padding: EdgeInsets.zero, + itemCount: 4, + itemBuilder: (BuildContext context, int index) { + return Container( + decoration: BoxDecoration( + color: Color(namesColor[index]), + borderRadius: BorderRadius.circular(10), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + names[index].toText12(color: Colors.white), + Row( + children: [ + Expanded( + child: namesInt[index].toStringAsFixed(1).toText16(color: Colors.white, isBold: true), + ), + SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white) + ], + ) + ], + ).paddingOnly(left: 10, right: 10, bottom: 6, top: 6), + ); + }, + ), + ), + ], + ), + 20.height, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + LocaleKeys.other.tr().toText12(), + LocaleKeys.services.tr().toText24(isBold: true), + ], + ), + ), + LocaleKeys.viewAllServices.tr().toText12(isUnderLine: true), + ], + ), + ], + ).paddingOnly(left: 21, right: 21, top: 48), + SizedBox( + height: 105 + 26, + child: ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.only(left: 21, right: 21, top: 13, bottom: 13), + scrollDirection: Axis.horizontal, + itemBuilder: (cxt, index) { + return AspectRatio( + aspectRatio: 105 / 105, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SvgPicture.asset(iconT[index]), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded( + child: namesT[index].toText11(isBold: true), + ), + SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4) + ], + ) + ], + ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12), + ), + ); + }, + separatorBuilder: (cxt, index) => 9.width, + itemCount: 4), + ) + ], + ), + ); } -} \ No newline at end of file +} diff --git a/lib/ui/login/verify_login_screen.dart b/lib/ui/login/verify_login_screen.dart index e661456..249fa52 100644 --- a/lib/ui/login/verify_login_screen.dart +++ b/lib/ui/login/verify_login_screen.dart @@ -59,7 +59,7 @@ class _VerifyLoginScreenState extends State { LocaleKeys.welcomeBack.tr().toText12(), "Mohammad Hussain".toText24(isBold: true), 10.height, - LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16, + LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(), Container( height: 72, margin: const EdgeInsets.only(top: 23, bottom: 23), @@ -80,7 +80,7 @@ class _VerifyLoginScreenState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - LocaleKeys.lastLoginDetails.tr().toText16, + LocaleKeys.lastLoginDetails.tr().toText16(), // Text( // user.editedOn != null // ? DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(user.editedOn)) @@ -95,7 +95,7 @@ class _VerifyLoginScreenState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - LocaleKeys.verificationType.tr().toText10(color: MyColors.greyColor), + LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color), Text( "SMS", // " " + getType(user.logInType, context), @@ -119,7 +119,7 @@ class _VerifyLoginScreenState extends State { ], ), ), - LocaleKeys.pleaseVerify.tr().toText16, + LocaleKeys.pleaseVerify.tr().toText16(), GridView( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9), physics: const NeverScrollableScrollPhysics(), @@ -653,7 +653,7 @@ class _VerifyLoginScreenState extends State { width: 38, color: isDisable ? MyColors.darkTextColor.withOpacity(0.7) : null, ), - _title.toText16 + _title.toText16() ], ), ), @@ -663,13 +663,13 @@ class _VerifyLoginScreenState extends State { Widget getButton(int flag) { switch (flag) { case 4: - return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/verify_whatsapp.svg', flag, null); + return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/login/verify_whatsapp.svg', flag, null); case 1: - return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/verify_sms.svg', flag, null); + return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/login/verify_sms.svg', flag, null); case 2: - return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/verify_thumb.svg', flag, BiometricType.fingerprint.index); + return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/login/verify_thumb.svg', flag, BiometricType.fingerprint.index); case 3: - return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/verify_face.svg', flag, BiometricType.face.index); + return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/login/verify_face.svg', flag, BiometricType.face.index); default: return const SizedBox(); } diff --git a/lib/widgets/app_logo.dart b/lib/widgets/app_logo.dart new file mode 100644 index 0000000..1c0bc37 --- /dev/null +++ b/lib/widgets/app_logo.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; + +class AppLogo extends StatelessWidget { + AppLogo({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + // TODO: implement build + return Row(children: [ + SvgPicture.asset( + "assets/mohemm_logo.svg", + height: 100, + width: 100, + alignment: Alignment.centerRight, + ), + ],); + } +} diff --git a/lib/widgets/button/default_button.dart b/lib/widgets/button/default_button.dart index b8ad88e..9e0fd23 100644 --- a/lib/widgets/button/default_button.dart +++ b/lib/widgets/button/default_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; extension WithContainer on Widget { Widget get insideContainer => Container(color: Colors.white, padding: const EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21), child: this); @@ -29,9 +30,9 @@ class DefaultButton extends StatelessWidget { borderRadius: BorderRadius.circular(6.0), gradient: onPress == null ? const LinearGradient(colors: [Color(0xffEAEAEA), Color(0xffEAEAEA)]) - : const LinearGradient(transform: GradientRotation(.83), begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ - Color(0xff32D892), - Color(0xff259CB8), + : const LinearGradient(transform: GradientRotation(.83), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, ]), ), child: Row( diff --git a/lib/widgets/circular_avatar.dart b/lib/widgets/circular_avatar.dart new file mode 100644 index 0000000..cd60e06 --- /dev/null +++ b/lib/widgets/circular_avatar.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; + +class CircularAvatar extends StatelessWidget { + final String? url; + final double radius; + final double width; + final double height; + + CircularAvatar({Key? key, this.radius = 70.0, this.width = 70, this.height = 60, this.url}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: height, + decoration: BoxDecoration( + shape: BoxShape.circle, + image: DecorationImage( + fit: BoxFit.cover, + image: NetworkImage(url ?? "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png"), + ), + ), + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 04a1968..dfbb0eb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -77,6 +77,8 @@ flutter: - assets/langs/ - assets/icons/ - assets/images/ + - assets/images/login/ + - assets/images/logos/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware.