diff --git a/android/app/build.gradle b/android/app/build.gradle index 9c3e91d..7f52936 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -34,7 +34,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply plugin: 'com.huawei.agconnect' android { - compileSdkVersion 33 + compileSdkVersion 34 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -53,7 +53,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "hmg.cloudSolutions.mohem" minSdkVersion 21 - targetSdkVersion 30 + targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } diff --git a/android/build.gradle b/android/build.gradle index 7991b9d..ec509c8 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.0' + ext.kotlin_version = '1.8.0' repositories { google() mavenCentral() @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.0.3' + classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.8' classpath 'com.huawei.agconnect:agcp:1.8.0.300' @@ -28,6 +28,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index ed1a787..b027681 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip diff --git a/assets/icons/calendar.png b/assets/icons/calendar.png new file mode 100644 index 0000000..bcd565d Binary files /dev/null and b/assets/icons/calendar.png differ diff --git a/assets/icons/calendar.svg b/assets/icons/calendar.svg new file mode 100644 index 0000000..f5b81d3 --- /dev/null +++ b/assets/icons/calendar.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 8c502cb..41d2e96 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -227,10 +227,12 @@ }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -241,6 +243,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a..ac88fca 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -40,7 +40,7 @@ TAG + UIApplicationSupportsIndirectInputEvents + diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index ec369c8..549bf2a 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -3,11 +3,11 @@ import 'package:flutter/cupertino.dart'; class MyColors { static const Color kWhiteColor = Color(0xffffffff); static const Color darkIconColor = Color(0xff28323A); - static const Color darkTextColor = Color(0xff2B353E); + // static const Color darkTextColor = Color(0xff2B353E); static const Color normalTextColor = Color(0xff5A5A5A); static const Color lightTextColor = Color(0xffBFBFBF); - static const Color gradiantStartColor = Color(0xff259db7); - static const Color gradiantEndColor = Color(0xff33c0a5); + // static const Color gradiantStartColor = Color(0xff259db7); + // static const Color gradiantEndColor = Color(0xff33c0a5); static const Color textMixColor = Color(0xff2BB8A6); static const Color backgroundColor = Color(0xffF8F8F8); static const Color grey41Color = Color(0xff414141); @@ -65,4 +65,11 @@ class MyColors { static const Color grey71Color = Color(0xff717171); static const Color darkGrey3BColor = Color(0xff3B3B3B); static const Color lightGreyIconColor = Color(0xff919191); + + static const Color moeLoginColor = Color(0xFF004D71); + + static const Color gradiantStartColor = Color(0xFF004D71); + static const Color gradiantEndColor = Color(0xFF004D71); + static const Color bgColor = Color(0xFF5FA5A0); + static const Color darkTextColor = Color(0xFF1D4C6E); } diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 91c75e4..0270e49 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -25,10 +25,18 @@ extension TrimString on String { extension EmailValidator on String { Widget get toWidget => Text(this); - Widget toText10({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle}) => Text( + Widget toText10({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle, double letterSpacing = -0.4}) => Text( this, maxLines: maxlines, - style: TextStyle(fontSize: 10, fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), + style: TextStyle( + fontSize: 10, fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: letterSpacing), + ); + + Widget toText9({Color? color, bool isBold = false, int? maxlines, FontStyle? fontStyle, double letterSpacing = -0.27}) => Text( + this, + maxLines: maxlines, + style: TextStyle( + fontSize: 9, fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: letterSpacing), ); Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isBold = false, int maxLine = 0}) => Text( @@ -159,10 +167,10 @@ extension EmailValidator on String { style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); - Widget toText24({Color? color, bool isBold = false, bool isCentered = false}) => Text( + Widget toText24({Color? color, bool isBold = false, bool isCentered = false, double letterspacing = -1.44}) => Text( this, textAlign: isCentered ? TextAlign.center : null, - style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: letterspacing, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); Widget toText30({Color? color, bool isBold = false, bool isCentered = false}) => Text( diff --git a/lib/ui/chat/chat_detailed_screen.dart b/lib/ui/chat/chat_detailed_screen.dart index 421eb91..a1d96bf 100644 --- a/lib/ui/chat/chat_detailed_screen.dart +++ b/lib/ui/chat/chat_detailed_screen.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:convert'; + import 'package:audio_waveforms/audio_waveforms.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -14,18 +14,16 @@ import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/models/chat/call.dart'; import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart'; import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_model.dart'; -import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart'; import 'package:mohem_flutter_app/provider/chat_call_provider.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; -import 'package:mohem_flutter_app/ui/chat/custom_auto_direction.dart'; import 'package:mohem_flutter_app/ui/chat/call/chat_outgoing_call_screen.dart'; import 'package:mohem_flutter_app/ui/chat/chat_bubble.dart'; import 'package:mohem_flutter_app/ui/chat/common.dart'; +import 'package:mohem_flutter_app/ui/chat/custom_auto_direction.dart'; import 'package:mohem_flutter_app/widgets/chat_app_bar_widge.dart'; import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart'; import 'package:provider/provider.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; -import 'package:signalr_netcore/signalr_client.dart'; import 'package:swipe_to/swipe_to.dart'; class ChatDetailedScreenParams { @@ -78,7 +76,7 @@ class _ChatDetailScreenState extends State { Widget build(BuildContext context) { params = ModalRoute.of(context)!.settings.arguments as ChatDetailedScreenParams; data = Provider.of(context, listen: false); - // callPro = Provider.of(context, listen: false); + // callPro = Provider.of(context, listen: false); if (params != null) { data.getSingleUserChatHistory( senderUID: AppState().chatDetails!.response!.id!.toInt(), @@ -143,7 +141,7 @@ class _ChatDetailScreenState extends State { dateTime: m.dateFormte(m.userChatHistory[i].createdDate!), cItem: m.userChatHistory[i], ), - onRightSwipe: () { + onRightSwipe: (DragUpdateDetails) { m.chatReply( m.userChatHistory[i], ); diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index ec9d8a3..3475f7d 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'dart:ui' as ui; import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_countdown_timer/flutter_countdown_timer.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -238,7 +237,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb }); }), Image.asset("assets/images/drawer/moe_logo_full.png", width: 130, height: 45), - SizedBox(width: 65), + const SizedBox(width: 65), // SvgPicture.asset( // "assets/images/announcements.svg", // matchTextDirection: true, @@ -264,8 +263,11 @@ class _DashboardScreenState extends State with WidgetsBindingOb Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.welcomeBack.tr().toText14(color: MyColors.grey77Color), - (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText24(isBold: true), + LocaleKeys.welcomeBack.tr().toText16(color: MyColors.grey77Color), + (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText24( + isBold: true, + letterspacing: -1.44, + ), 16.height, Row( children: [ @@ -351,10 +353,10 @@ class _DashboardScreenState extends State with WidgetsBindingOb height: 45, padding: const EdgeInsets.only(left: 10, right: 10), decoration: BoxDecoration( - color: Color(0xff259EA4), + color: const Color(0xff259EA4), borderRadius: BorderRadius.only( - bottomRight: AppState().isArabic(context) ? Radius.circular(0) : Radius.circular(15), - bottomLeft: AppState().isArabic(context) ? Radius.circular(15) : Radius.circular(0), + bottomRight: AppState().isArabic(context) ? const Radius.circular(0) : const Radius.circular(15), + bottomLeft: AppState().isArabic(context) ? const Radius.circular(15) : const Radius.circular(0), ), ), child: SvgPicture.asset(model.isTimeRemainingInSeconds == 0 ? "assets/images/attendance.svg" : "assets/images/attendance.svg"), @@ -383,57 +385,79 @@ class _DashboardScreenState extends State with WidgetsBindingOb ), if (env.dashboard.attendance) 9.width, Expanded( - child: MenusWidget(), + child: Row( + children: [ + if (env.monthlyAttendance) + Expanded( + child: InkWell( + child: AspectRatio( + aspectRatio: 1, + child: Container( + width: double.infinity, + padding: const EdgeInsets.all(11), + margin: const EdgeInsets.symmetric(horizontal: 0), + decoration: const BoxDecoration( + color: MyColors.bgColor, + borderRadius: BorderRadius.all(Radius.circular(15)), + ), + child: Container( + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/icons/calendar.png", + ), + opacity: 1, + ), + ), + child: Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + LocaleKeys.employee_leaves_calender.tr().toText16( + isBold: false, + color: Colors.white, + maxlines: 2, + ), + 7.height, + LocaleKeys.view_your_leave_information.tr().toText10(color: Colors.white, maxlines: 2, letterSpacing: -0.1), + const Expanded( + child: SizedBox(), + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + LocaleKeys.view_details.tr().toText10(color: Colors.white, letterSpacing: -0.3), + RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)) + .paddingOnly(left: 5), + ], + ), + ], + ), + ), + ], + ), + ), + ), + ), + onTap: () { + Navigator.pushNamed(context, AppRoutes.monthlyAttendance); + }, + ), + ), + 9.width, + Expanded(child: MenusWidget()), + ], + ), ), ], ), ], ).paddingOnly(left: 21, right: 21, top: 7, bottom: 21), - if (env.monthlyAttendance) - InkWell( - child: Container( - width: double.infinity, - padding: EdgeInsets.all(12), - margin: EdgeInsets.symmetric(horizontal: 21), - decoration: const BoxDecoration( - color: MyColors.gradiantStartColor, - borderRadius: BorderRadius.all(Radius.circular(12)), - ), - child: Row( - children: [ - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.employee_leaves_calender.tr().toText18(isBold: true, color: Colors.white), - 2.height, - LocaleKeys.view_your_leave_information.tr().toText12(color: Colors.white), - 8.height, - Container( - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.4), - borderRadius: const BorderRadius.all(Radius.circular(12)), - ), - padding: EdgeInsets.all(8), - child: LocaleKeys.view_details.tr().toText14(color: Colors.white), - ), - ], - ), - ), - const Icon( - Icons.calendar_month, - color: Colors.white, - size: 80, - ), - ], - ), - ), - onTap: () { - Navigator.pushNamed(context, AppRoutes.monthlyAttendance); - }, - ), - 21.height, + 15.height, Visibility( visible: env.offersDiscount, child: Column( @@ -534,23 +558,27 @@ class _DashboardScreenState extends State with WidgetsBindingOb ], ), ), - Container( - width: double.infinity, - padding: const EdgeInsets.only(top: 31), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)), - border: Border.all(color: MyColors.lightGreyEDColor, width: 1), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (env.marathon) - context.watch().isLoading ? const MarathonBannerShimmer().paddingAll(20) : const MarathonBanner().paddingOnly(left: 21, right: 21, bottom: 21, top: 8), - ServicesWidget(), - ], - ), + // Container( + // width: double.infinity, + // padding: const EdgeInsets.only(top: 31), + // decoration: BoxDecoration( + // color: Colors.white, + // borderRadius: const BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)), + // border: Border.all(color: MyColors.lightGreyEDColor, width: 1), + // ), + // child: + Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (env.marathon) + context.watch().isLoading ? const MarathonBannerShimmer().paddingAll(20) : const MarathonBanner().paddingOnly(left: 21, right: 21, bottom: 21, top: 8), + Container( + // color: Colors.transparent, + child: ServicesWidget(), + ), + ], ), + //), ], ), ), diff --git a/lib/ui/landing/widget/menus_widget.dart b/lib/ui/landing/widget/menus_widget.dart index 521c2a3..aac33fd 100644 --- a/lib/ui/landing/widget/menus_widget.dart +++ b/lib/ui/landing/widget/menus_widget.dart @@ -16,12 +16,13 @@ import 'package:provider/provider.dart'; class MenusWidget extends StatelessWidget { @override Widget build(BuildContext context) { - List namesColor = [0xff125765, 0xff239D8F, 0xff2BB8A8, 0xff1D92AA]; + // List namesColor = [0xff125765, 0xff239D8F, 0xff2BB8A8, 0xff1D92AA]; + List namesColor = [0xff1C4B6D, 0xff33678D, 0xff9FB7C4, 0xff5FA5A0]; return Consumer( builder: (cxt, data, child) { return GridView( - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 1.75, crossAxisSpacing: 9, mainAxisSpacing: 9), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 78 / 75, crossAxisSpacing: 9, mainAxisSpacing: 9), padding: EdgeInsets.zero, shrinkWrap: true, primary: false, @@ -40,11 +41,11 @@ class MenusWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.workList.tr().toText12(color: Colors.white), + LocaleKeys.workList.tr().toText10(color: Colors.white, letterSpacing: -0.6), Row( children: [ Expanded( - child: data.workListCounter.toString().toText16(color: Colors.white, isBold: true, maxlines: 1), + child: data.workListCounter.toString().toText14(color: Colors.white, isBold: true, maxlines: 1), ), RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)), ], @@ -68,11 +69,11 @@ class MenusWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.missingSwipes.tr().toText12(color: Colors.white), + LocaleKeys.missingSwipes.tr().toText10(color: Colors.white, letterSpacing: -0.6), Row( children: [ Expanded( - child: data.missingSwipeCounter.toString().toText16(color: Colors.white, isBold: true, maxlines: 1), + child: data.missingSwipeCounter.toString().toText14(color: Colors.white, isBold: true, maxlines: 1), ), RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)), ], @@ -95,11 +96,11 @@ class MenusWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.leaveBalance.tr().toText12(color: Colors.white), + LocaleKeys.businessTripBalance.tr().toText10(color: Colors.white, letterSpacing: -0.6), Row( children: [ Expanded( - child: (data.leaveBalance)!.toStringAsFixed(0).toText16(color: Colors.white, isBold: true, maxlines: 1), + child: data.businessTrip.toStringAsFixed(0).toText14(color: Colors.white, isBold: true, maxlines: 1), ), RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)), ], @@ -107,7 +108,8 @@ class MenusWidget extends StatelessWidget { ], ).paddingOnly(left: 10, right: 10, bottom: 6, top: 6), ).onPress(() { - Navigator.pushNamed(context, AppRoutes.leaveBalance); + //Navigator.pushNamed(context, AppRoutes.leaveBalance); + Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.business_mission.tr(), "XXX_HR_EIT_BUSINESS_MISSION_SS")); }), data.isLeaveTicketBalanceLoading ? MenuShimmer().onPress(() { @@ -115,18 +117,18 @@ class MenusWidget extends StatelessWidget { }) : Container( decoration: BoxDecoration( - color: Color(namesColor[2]), + color: Color(namesColor[1]), borderRadius: BorderRadius.circular(10), ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.businessTripBalance.tr().toText12(color: Colors.white), + LocaleKeys.leaveBalance.tr().toText10(color: Colors.white, letterSpacing: -0.6), Row( children: [ Expanded( - child: data.businessTrip.toStringAsFixed(0).toText16(color: Colors.white, isBold: true, maxlines: 1), + child: (data.leaveBalance)!.toStringAsFixed(0).toText14(color: Colors.white, isBold: true, maxlines: 1), ), RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)), ], @@ -134,10 +136,7 @@ class MenusWidget extends StatelessWidget { ], ).paddingOnly(left: 10, right: 10, bottom: 6, top: 6), ).onPress(() { - //Navigator.pushNamed(context, AppRoutes.leaveBalance); - Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.business_mission.tr(), "XXX_HR_EIT_BUSINESS_MISSION_SS")); - - + Navigator.pushNamed(context, AppRoutes.leaveBalance); }), if (env.dashboard.ticketBalance) data.isLeaveTicketBalanceLoading @@ -153,11 +152,11 @@ class MenusWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.ticketBalance.tr().toText12(color: Colors.white), + LocaleKeys.ticketBalance.tr().toText10(color: Colors.white, letterSpacing: -0.6), Row( children: [ Expanded( - child: data.ticketBalance.toStringAsFixed(2).toText16(color: Colors.white, isBold: true, maxlines: 1), + child: data.ticketBalance.toStringAsFixed(2).toText14(color: Colors.white, isBold: true, maxlines: 1), ), RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)), ], @@ -182,14 +181,15 @@ class MenusWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - LocaleKeys.myRequest.tr().toText12(color: Colors.white), + LocaleKeys.myRequest.tr().toText10(color: Colors.white, letterSpacing: -0.6), Row( mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.center, children: [ // Expanded( // child: data.ticketBalance.toStringAsFixed(2).toText16(color: Colors.white, isBold: true, maxlines: 1), // ), - RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white)), + RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg", color: Colors.white).paddingOnly(bottom: 4)), ], ) ], diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart index 03ca381..3aa414d 100644 --- a/lib/ui/landing/widget/services_widget.dart +++ b/lib/ui/landing/widget/services_widget.dart @@ -37,69 +37,151 @@ class ServicesWidget extends StatelessWidget { return data.isServicesMenusLoading ? whileLoading() : ListView.separated( - padding: const EdgeInsets.only(top: 0), + padding: const EdgeInsets.only(top: 0, bottom: 0), itemBuilder: (context, parentIndex) { return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - data.homeMenus![parentIndex].menuEntry.prompt!.toSectionHeading().paddingOnly(left: 21, right: 21), - 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: data.isServicesMenusLoading - ? ServicesMenuShimmer() - : 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: [ - Image.memory( - const Base64Decoder().convert(data.homeMenus![parentIndex].menuEntiesList[index].icon ?? ""), - scale: 1.25, - ), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Expanded( - child: data.homeMenus![parentIndex].menuEntiesList[index].prompt!.toText10(isBold: true), + if (parentIndex == 0) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + data.homeMenus![parentIndex].menuEntry.prompt!.toSectionHeading().paddingOnly(left: 21, right: 21), + Container( + height: 105 + 26, + width: double.infinity, + // color: Colors.white.withOpacity(0.4), + 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: data.isServicesMenusLoading + ? ServicesMenuShimmer() + : Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 18, + offset: const Offset(0, 0), + ), + ], ), - RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4)), - ], - ) - ], - ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12), - ).onPress(() { - handleOnPress(context, data.homeMenus![parentIndex].menuEntiesList[index]); - }), - ); - }, - separatorBuilder: (BuildContext cxt, int index) => 9.width, - itemCount: data.homeMenus![parentIndex].menuEntiesList.length), - ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.memory( + const Base64Decoder().convert(data.homeMenus![parentIndex].menuEntiesList[index].icon ?? ""), + scale: 1.25, + ), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded( + child: data.homeMenus![parentIndex].menuEntiesList[index].prompt!.toText9(isBold: true), + ), + RotatedBox(quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4)), + ], + ) + ], + ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12), + ).onPress(() { + handleOnPress(context, data.homeMenus![parentIndex].menuEntiesList[index]); + })); + }, + separatorBuilder: (BuildContext cxt, int index) => 9.width, + itemCount: data.homeMenus![parentIndex].menuEntiesList.length), + ), + ], + ), + if (parentIndex != 0) + Container( + padding: const EdgeInsets.only(top: 25), + decoration: parentIndex == 1 + ? const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only(topRight: Radius.circular(50), topLeft: Radius.circular(50)), + ) + : const BoxDecoration( + color: Colors.white, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + data.homeMenus![parentIndex].menuEntry.prompt!.toSectionHeading().paddingOnly(left: 21, right: 21), + Container( + height: 105 + 26, + // color: Colors.white, + width: double.infinity, + 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: data.isServicesMenusLoading + ? ServicesMenuShimmer() + : Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 18, + offset: const Offset(0, 0), + ), + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.memory( + const Base64Decoder().convert(data.homeMenus![parentIndex].menuEntiesList[index].icon ?? ""), + scale: 1.25, + ), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded( + child: data.homeMenus![parentIndex].menuEntiesList[index].prompt!.toText9(isBold: true), + ), + RotatedBox( + quarterTurns: AppState().isArabic(context) ? 2 : 4, child: SvgPicture.asset("assets/images/arrow_next.svg").paddingOnly(bottom: 4)), + ], + ) + ], + ).paddingOnly(left: 10, right: 10, bottom: 10, top: 12), + ).onPress(() { + handleOnPress(context, data.homeMenus![parentIndex].menuEntiesList[index]); + })); + }, + separatorBuilder: (BuildContext cxt, int index) => 9.width, + itemCount: data.homeMenus![parentIndex].menuEntiesList.length), + ), + ], + ), + ) ], ); }, separatorBuilder: (BuildContext context, int index) { - return 12.height; + if (index == 0) return SizedBox(); + return Container( + color: Colors.white, + height: 7, + ); }, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index d74ce0d..e3cdd74 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/src/public_ext.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -142,7 +141,8 @@ class _LoginScreenState extends State { Future checkPrefs() async { String username = await Utils.getStringFromPrefs(SharedPrefsConsts.username); - if (username.isNotEmpty) { // for test purpose i added ! + if (username.isNotEmpty) { + // for test purpose i added ! String password = await Utils.getStringFromPrefs(SharedPrefsConsts.password); // String firebaseToken = await Utils.getStringFromPrefs(SharedPrefsConsts.firebaseToken); // print("firebaseToken:$firebaseToken"); @@ -152,7 +152,6 @@ class _LoginScreenState extends State { } } - void performLogin() async { Utils.showLoading(context); try { @@ -186,18 +185,21 @@ class _LoginScreenState extends State { @override Widget build(BuildContext context) { - username.text = "1002528733"; - password.text = "moe123456"; if (isAppOpenBySystem == null) { isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool; if (!kReleaseMode) { // username.text = "1100313582"; // password.text = "moe123456"; + // username.text = "1002528733"; + // password.text = "moe123456"; username.text = "1024056812"; password.text = "moe123456"; + // username.text = "1063437063"; + // password.text = "moe123456"; + // 1) Normal user : // Username: 1100313582 // Employee # and Name: 210624 - شهد خالد ابراهيم الشامخ @@ -233,21 +235,22 @@ class _LoginScreenState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Image.asset("assets/images/drawer/moe_logo.png", width: 60, height: 60), - - Row(children: [ - LocaleKeys.english.tr().toText14(color: AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() { - context.setLocale(const Locale("en", "US")); - }), - Container( - width: 1, - color: MyColors.darkWhiteColor, - height: 16, - margin: const EdgeInsets.only(left: 10, right: 10), - ), - LocaleKeys.arabic.tr().toText14(color: !AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() { - context.setLocale(const Locale("ar", "SA")); - }), - ],) + Row( + children: [ + LocaleKeys.english.tr().toText14(color: AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() { + context.setLocale(const Locale("en", "US")); + }), + Container( + width: 1, + color: MyColors.darkWhiteColor, + height: 16, + margin: const EdgeInsets.only(left: 10, right: 10), + ), + LocaleKeys.arabic.tr().toText14(color: !AppState().isArabic(context) ? null : MyColors.textMixColor).onPress(() { + context.setLocale(const Locale("ar", "SA")); + }), + ], + ) ], ), Expanded( @@ -285,10 +288,14 @@ class _LoginScreenState extends State { ), ), ), - DefaultButton(LocaleKeys.login.tr(), () async { - SystemChannels.textInput.invokeMethod('TextInput.hide'); - performLogin(); - }).insideContainer + DefaultButton( + LocaleKeys.login.tr(), + () async { + SystemChannels.textInput.invokeMethod('TextInput.hide'); + performLogin(); + }, + color: MyColors.moeLoginColor, + ).insideContainer ], ), ); diff --git a/lib/ui/screens/offers_and_discounts/offers_and_discounts_details.dart b/lib/ui/screens/offers_and_discounts/offers_and_discounts_details.dart index b4cb242..329b441 100644 --- a/lib/ui/screens/offers_and_discounts/offers_and_discounts_details.dart +++ b/lib/ui/screens/offers_and_discounts/offers_and_discounts_details.dart @@ -1,8 +1,6 @@ import 'dart:io'; -import 'dart:typed_data'; import 'dart:ui' as ui; -import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; @@ -76,7 +74,7 @@ class _OffersAndDiscountsDetailsState extends State { : getOffersList[0].titleEn!.toText22(isBold: true, color: const Color(0xff2B353E)).center, Html( data: AppState().isArabic(context) ? getOffersList[0].descriptionAr! : getOffersList[0].descriptionEn ?? "", - onLinkTap: (String? url, RenderContext context, Map attributes, _) { + onLinkTap: (String? url, Map attributes, _) { launchUrl(Uri.parse(url!)); }, ), diff --git a/lib/widgets/button/default_button.dart b/lib/widgets/button/default_button.dart index 71de642..338a13d 100644 --- a/lib/widgets/button/default_button.dart +++ b/lib/widgets/button/default_button.dart @@ -5,8 +5,7 @@ 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), + padding: const EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21), child: this, ); } @@ -76,8 +75,7 @@ class DefaultButton extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ if (iconData != null) Icon(iconData, color: textColor), - if (svgIcon != null) - SvgPicture.asset(svgIcon ?? "", color: textColor), + if (svgIcon != null) SvgPicture.asset(svgIcon ?? "", color: textColor), if (!isTextExpanded) Padding( padding: EdgeInsets.only(