From 4a7b2030c0bde0446d9698eb46c8c090002ed512 Mon Sep 17 00:00:00 2001 From: uveshmenpur Date: Wed, 12 Jul 2023 18:16:51 +0530 Subject: [PATCH 1/8] RiverPod Integration --- .../com/example/cardtrading/MainActivity.kt | 3 +- .../authentication/get_otp_controller.dart | 36 + .../card_details/card_details_controller.dart | 37 + .../card_shop/card_shop_controller.dart | 13 + .../checkout/checkout_controller.dart | 55 ++ .../choose_language_controller.dart | 16 + .../add_address_controller.dart | 31 + .../complete_profie_controller.dart | 13 + .../home_screen/drawer_controller.dart | 28 + .../home_screen/home_screen_controller.dart | 37 + .../onboarding/onboarding_controller.dart | 40 + .../authentication/mobile/get_otp_mobile.dart | 106 +-- .../mobile/helper/sign_in_text_field.dart | 18 +- .../authentication/mobile/sign_in_mobile.dart | 7 +- .../mobile/card_details_mobile.dart | 178 ++--- lib/ui/card_shop/mobile/card_shop_mobile.dart | 269 +++---- lib/ui/checkout/checkout.dart | 8 +- lib/ui/checkout/mobile/checkout_mobile.dart | 397 +++++----- .../checkout/mobile/helper/checkout_list.dart | 116 ++- .../mobile/choose_language_mobile.dart | 79 +- .../mobile/add_address_mobile.dart | 721 ++++++++---------- .../mobile/complete_profile_mobile.dart | 124 +-- .../mobile/helper/home_screen_drawe_body.dart | 156 ---- .../mobile/helper/home_screen_drawer.dart | 36 +- .../helper/home_screen_drawer_body.dart | 124 +++ .../mobile/home_screen_mobile.dart | 190 ++--- .../onboarding/mobile/onboarding_mobile.dart | 117 ++- .../mobile/splash_screen_mobile.dart | 9 +- .../mobile/helper/subscription_card.dart | 0 .../mobile/helper/subscription_screen.dart | 0 .../mobile/subscription_mobile.dart | 13 +- .../subscription.dart | 2 +- pubspec.yaml | 1 + 33 files changed, 1578 insertions(+), 1402 deletions(-) create mode 100644 lib/framework/controllers/authentication/get_otp_controller.dart create mode 100644 lib/framework/controllers/card_details/card_details_controller.dart create mode 100644 lib/framework/controllers/card_shop/card_shop_controller.dart create mode 100644 lib/framework/controllers/checkout/checkout_controller.dart create mode 100644 lib/framework/controllers/choose_language/choose_language_controller.dart create mode 100644 lib/framework/controllers/complete_your_profile/add_address_controller.dart create mode 100644 lib/framework/controllers/complete_your_profile/complete_profie_controller.dart create mode 100644 lib/framework/controllers/home_screen/drawer_controller.dart create mode 100644 lib/framework/controllers/home_screen/home_screen_controller.dart create mode 100644 lib/framework/controllers/onboarding/onboarding_controller.dart delete mode 100644 lib/ui/home_screen/mobile/helper/home_screen_drawe_body.dart create mode 100644 lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart rename lib/ui/{terms_and_condition => subscription_plan}/mobile/helper/subscription_card.dart (100%) rename lib/ui/{terms_and_condition => subscription_plan}/mobile/helper/subscription_screen.dart (100%) rename lib/ui/{terms_and_condition => subscription_plan}/mobile/subscription_mobile.dart (93%) rename lib/ui/{terms_and_condition => subscription_plan}/subscription.dart (84%) diff --git a/android/app/src/main/kotlin/com/example/cardtrading/MainActivity.kt b/android/app/src/main/kotlin/com/example/cardtrading/MainActivity.kt index c66467b..8df45a1 100644 --- a/android/app/src/main/kotlin/com/example/cardtrading/MainActivity.kt +++ b/android/app/src/main/kotlin/com/example/cardtrading/MainActivity.kt @@ -2,5 +2,4 @@ package com.example.cardtrading import io.flutter.embedding.android.FlutterActivity -class MainActivity: FlutterActivity() { -} +class MainActivity: FlutterActivity() diff --git a/lib/framework/controllers/authentication/get_otp_controller.dart b/lib/framework/controllers/authentication/get_otp_controller.dart new file mode 100644 index 0000000..67569df --- /dev/null +++ b/lib/framework/controllers/authentication/get_otp_controller.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final getOtpController = ChangeNotifierProvider( + (ref) { + return GetOtpController(); + }, +); + +class GetOtpController extends ChangeNotifier { + int countDown = 59; + late Timer timer; + + void changeCount(int count){ + countDown = count; + notifyListeners(); + } + void decrement(){ + countDown--; + notifyListeners(); + } + + void startTimer() { + timer = Timer.periodic( + const Duration(seconds: 1), + (timer) { + if (countDown > 0) { + decrement(); + } else { + timer.cancel(); + } + }, + ); + } +} diff --git a/lib/framework/controllers/card_details/card_details_controller.dart b/lib/framework/controllers/card_details/card_details_controller.dart new file mode 100644 index 0000000..6e58418 --- /dev/null +++ b/lib/framework/controllers/card_details/card_details_controller.dart @@ -0,0 +1,37 @@ +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final cardDetailsController = ChangeNotifierProvider((ref) { + return CardDetailsController(); +}); + +class CardDetailsController extends ChangeNotifier { + bool isFavourite = false; + final keys = [ + AppStrings.keyCardSubjectName, + AppStrings.keyCardGrade, + AppStrings.keyCardBrand + ]; + final values = [ + AppStrings.keyCardSubjectNameValue, + AppStrings.keyCardGradeValue, + AppStrings.keyCardBrandValue + ]; + final cardDetailDescription = [ + AppStrings.keyExpressShipping, + AppStrings.keyAuthenticGuarantee, + AppStrings.keySecurePayment, + ]; + final cardDetailIcons = [ + '${AppAssets.svgLocation}shipping.svg', + '${AppAssets.svgLocation}guarantee.svg', + '${AppAssets.svgLocation}payment.svg', + ]; + + void setFavourite() { + isFavourite = !isFavourite; + notifyListeners(); + } +} diff --git a/lib/framework/controllers/card_shop/card_shop_controller.dart b/lib/framework/controllers/card_shop/card_shop_controller.dart new file mode 100644 index 0000000..2e8f9a1 --- /dev/null +++ b/lib/framework/controllers/card_shop/card_shop_controller.dart @@ -0,0 +1,13 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final cardShopController = ChangeNotifierProvider((ref){ + return CardShopController(); +}); + +class CardShopController extends ChangeNotifier{ + int pageIndex = 0; + void setOrIncrementPageIndex({int? index}){ + pageIndex = index ?? pageIndex + 1; + } +} \ No newline at end of file diff --git a/lib/framework/controllers/checkout/checkout_controller.dart b/lib/framework/controllers/checkout/checkout_controller.dart new file mode 100644 index 0000000..8762105 --- /dev/null +++ b/lib/framework/controllers/checkout/checkout_controller.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final checkoutController = ChangeNotifierProvider((ref) { + return CheckoutController(); +}); + +class CheckoutController extends ChangeNotifier { + List cartList = [ + CartModel(cardName: '2004 PANINI MEGA CRACKS LIONEL MESSI #71BIS', cardType: 'Exclusive', cardQty: 10, cardPrice: '214697.00'), + CartModel(cardName: '2004 PANINI MEGA CRACKS LIONEL MESSI #71BIS', cardType: 'Exclusive', cardQty: 5, cardPrice: '214697.00'), + ]; + + void deleteCardFromCartList(int index){ + if(cartList.length >= 2){ + cartList.removeAt(index); + }else{ + cartList[index].cardQty = 0; + } + notifyListeners(); + } + void addCard(CartModel cartModel){ + cartList.add(cartModel); + notifyListeners(); + } + + int uQty = 0; + + void increaseQty(int index){ + if(cartList[index].cardQty < 15){ + cartList[index].cardQty++; + } + notifyListeners(); + } + + void decreaseQty(int index){ + cartList[index].cardQty--; + notifyListeners(); + } +} + +class CartModel{ + String cardName; + String cardType; + int cardQty; + String cardPrice; + + CartModel({ + required this.cardName, + required this.cardType, + required this.cardQty, + required this.cardPrice, + }); + +} diff --git a/lib/framework/controllers/choose_language/choose_language_controller.dart b/lib/framework/controllers/choose_language/choose_language_controller.dart new file mode 100644 index 0000000..a46c3ca --- /dev/null +++ b/lib/framework/controllers/choose_language/choose_language_controller.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final chooseLanguageController = ChangeNotifierProvider((ref){ + return ChooseLanguageController(); +}); + +class ChooseLanguageController extends ChangeNotifier{ + List languages = ['English', 'عربي']; + String selectedLanguage = 'English'; + + void changeLanguage(int index){ + selectedLanguage = languages[index]; + notifyListeners(); + } +} \ No newline at end of file diff --git a/lib/framework/controllers/complete_your_profile/add_address_controller.dart b/lib/framework/controllers/complete_your_profile/add_address_controller.dart new file mode 100644 index 0000000..0cc0644 --- /dev/null +++ b/lib/framework/controllers/complete_your_profile/add_address_controller.dart @@ -0,0 +1,31 @@ +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final addAddressController = +ChangeNotifierProvider((ref) => AddAddressController()); + +class AddAddressController extends ChangeNotifier { + String? area, block, street; + int id = 0; + List areas = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List blocks = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List streets = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List addressTypes = [AppStrings.keyAddressTypeOne, AppStrings.keyAddressTypeTwo, AppStrings.keyAddressTypeThree]; + void setArea(String? value){ + area = value; + notifyListeners(); + } + void setBlock(String? value){ + area = value; + notifyListeners(); + } + void setStreet(String? value){ + area = value; + notifyListeners(); + } + void setId(int newId){ + id = newId; + notifyListeners(); + } +} diff --git a/lib/framework/controllers/complete_your_profile/complete_profie_controller.dart b/lib/framework/controllers/complete_your_profile/complete_profie_controller.dart new file mode 100644 index 0000000..468ccbb --- /dev/null +++ b/lib/framework/controllers/complete_your_profile/complete_profie_controller.dart @@ -0,0 +1,13 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final completeProfileController = + ChangeNotifierProvider((ref) => CompleteProfileController()); + +class CompleteProfileController extends ChangeNotifier { + bool hasReferral = false; + void addReferral(){ + hasReferral = !hasReferral; + notifyListeners(); + } +} diff --git a/lib/framework/controllers/home_screen/drawer_controller.dart b/lib/framework/controllers/home_screen/drawer_controller.dart new file mode 100644 index 0000000..91bd779 --- /dev/null +++ b/lib/framework/controllers/home_screen/drawer_controller.dart @@ -0,0 +1,28 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final homeScreenDrawerController = ChangeNotifierProvider((ref) { + return HomeScreenDrawerController(); +}); + +class HomeScreenDrawerController extends ChangeNotifier { + final List list = [ + ///List of items in Home Screen drawer + 'Home', + 'My Orders', + 'Favourites', + 'Subscription Plan', + 'Rewards', + 'Terms & Conditions', + 'Change Language', + 'Refer & Earn', + 'Contact Us', + 'About us', + 'FAQ', + ]; + int id = 0; + void setOrIncrementId({int? newId}){ + id = newId ?? id+1; + notifyListeners(); + } +} diff --git a/lib/framework/controllers/home_screen/home_screen_controller.dart b/lib/framework/controllers/home_screen/home_screen_controller.dart new file mode 100644 index 0000000..e438e85 --- /dev/null +++ b/lib/framework/controllers/home_screen/home_screen_controller.dart @@ -0,0 +1,37 @@ +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final homeScreenController = ChangeNotifierProvider( + (ref) { + return HomeScreenController(); + }, +); + +class HomeScreenController extends ChangeNotifier { + final appBarActionList = [ + '${AppAssets.svgLocation}search.svg', + '${AppAssets.svgLocation}shopping_cart.svg', + '${AppAssets.svgLocation}notification.svg', + ]; + final bottomNavigationBarSvgPath = [ + '${AppAssets.svgLocation}home.svg', + '${AppAssets.svgLocation}portfolio.svg', + '${AppAssets.svgLocation}store.svg', + '${AppAssets.svgLocation}profile.svg', + ]; + String url = '${AppAssets.svgLocation}dark_mode.svg'; + int id = 0; + + void setId({int? newId}) { + id = newId ?? id + 1; + notifyListeners(); + } + + void changeMode() { + url == '${AppAssets.svgLocation}dark_mode.svg' + ? url = '${AppAssets.svgLocation}light_mode.svg' + : url = '${AppAssets.svgLocation}dark_mode.svg'; + notifyListeners(); + } +} diff --git a/lib/framework/controllers/onboarding/onboarding_controller.dart b/lib/framework/controllers/onboarding/onboarding_controller.dart new file mode 100644 index 0000000..8b9554d --- /dev/null +++ b/lib/framework/controllers/onboarding/onboarding_controller.dart @@ -0,0 +1,40 @@ +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final onBoardingController = ChangeNotifierProvider( + (ref) { + return OnBoardingController(); + }, +); + +class OnBoardingController extends ChangeNotifier { + int selectedPage = 0; + + List onBoardingTitle = [ + AppStrings.keyOnBoardingTitle1, + AppStrings.keyOnBoardingTitle2, + AppStrings.keyOnBoardingTitle3 + ]; + List onBoardingContent = [ + AppStrings.keyOnBoardingContent1, + AppStrings.keyOnBoardingContent2, + AppStrings.keyOnBoardingContent3 + ]; + void changePage(int index){ + selectedPage = index; + notifyListeners(); + } + void increment(){ + selectedPage++; + notifyListeners(); + } + void animateToNextPage(PageController pageController) { + pageController.animateToPage( + selectedPage, + duration: const Duration(milliseconds: 250), + curve: Curves.easeIn, + ); + notifyListeners(); + } +} diff --git a/lib/ui/authentication/mobile/get_otp_mobile.dart b/lib/ui/authentication/mobile/get_otp_mobile.dart index c0ecb36..58ccf22 100644 --- a/lib/ui/authentication/mobile/get_otp_mobile.dart +++ b/lib/ui/authentication/mobile/get_otp_mobile.dart @@ -1,5 +1,4 @@ -import 'dart:async'; - +import 'package:cardtrading/framework/controllers/authentication/get_otp_controller.dart'; import 'package:cardtrading/ui/complete_your_profile/complete_profile.dart'; import 'package:cardtrading/ui/onboarding/onboarding.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; @@ -9,38 +8,29 @@ import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:cardtrading/ui/utils/widget/common_title.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:pin_code_fields/pin_code_fields.dart'; -class GetOtpMobile extends StatefulWidget { +class GetOtpMobile extends ConsumerStatefulWidget { const GetOtpMobile({super.key}); @override - State createState() => _GetOtpMobileState(); + ConsumerState createState() => _GetOtpMobileState(); } -class _GetOtpMobileState extends State { - int _countDown = 59; - late Timer timer; +class _GetOtpMobileState extends ConsumerState { final _formKey = GlobalKey(); - void startTimer() { - timer = Timer.periodic(const Duration(seconds: 1), (timer) { - if (_countDown > 0) { - setState(() { - _countDown--; - }); - } else { - timer.cancel(); - } - }); - } - @override void initState() { super.initState(); - startTimer(); + SchedulerBinding.instance.addPostFrameCallback((_) { + final getOtpWatch = ref.watch(getOtpController); + getOtpWatch.startTimer(); + }); } @override @@ -133,31 +123,45 @@ class _GetOtpMobileState extends State { color: AppColors.checkoutTextColor, ), ), - InkWell( - onTap: () { - setState(() { - _countDown = 8; - startTimer(); - }); + Consumer( + builder: (BuildContext context, WidgetRef ref, + Widget? child) { + final getOtpWatch = ref.watch(getOtpController); + return InkWell( + onTap: () { + getOtpWatch.changeCount(20); + getOtpWatch.startTimer(); + }, + child: Visibility( + visible: getOtpWatch.countDown == 0, + child: Text( + AppStrings.keyResend, + style: TextStyles.semiBold.copyWith( + fontSize: 12.sp, + color: AppColors.primary, + fontFamily: 'Sora'), + ), + ), + ); }, - child: Visibility( - visible: _countDown == 0, - child: Text( - AppStrings.keyResend, - style: TextStyles.semiBold.copyWith( - fontSize: 12.sp, - color: AppColors.primary, - fontFamily: 'Sora'), - ), - ), ), - Expanded( - child: Text( - _countDown.toString().length >= 2 - ? _countDown.toString().padLeft(3, '00:') - : _countDown.toString().padLeft(2, '00:0'), - textAlign: TextAlign.end, - ), + Consumer( + builder: (BuildContext context, WidgetRef ref, + Widget? child) { + final getOtpRead = ref.watch(getOtpController); + return Expanded( + child: Text( + getOtpRead.countDown.toString().length >= 2 + ? getOtpRead.countDown + .toString() + .padLeft(3, '00:') + : getOtpRead.countDown + .toString() + .padLeft(2, '00:0'), + textAlign: TextAlign.end, + ), + ); + }, ), ], ), @@ -179,10 +183,20 @@ class _GetOtpMobileState extends State { Widget _pinCodeTextField(BuildContext context) { return PinCodeTextField( validator: (value) { - if (value?.length != 6) { - return 'Enter Valid OTP'; + try { + double num = double.parse(value?? ''); + if (value?.length != 6) { + return 'Enter Valid OTP'; + } else { + return null; + } + } catch (e) { + if (value?.length != 6) { + return 'Enter Valid OTP'; + } else { + return 'Enter Valid OTP'; + } } - return null; }, length: 6, obscureText: false, diff --git a/lib/ui/authentication/mobile/helper/sign_in_text_field.dart b/lib/ui/authentication/mobile/helper/sign_in_text_field.dart index 376fbbc..0febe61 100644 --- a/lib/ui/authentication/mobile/helper/sign_in_text_field.dart +++ b/lib/ui/authentication/mobile/helper/sign_in_text_field.dart @@ -18,11 +18,21 @@ class SignInTextField extends StatelessWidget { onTapOutside: (pointer) { FocusManager.instance.primaryFocus?.unfocus(); }, - validator: (value){ - if(value?.length != 10){ - return 'Enter Valid Phone Number'; + validator: (value) { + try { + double num = double.parse(value ?? ''); + if (value?.length != 10) { + return 'Enter Valid Phone Number'; + } else { + return null; + } + } catch (e) { + if (value?.length != 10) { + return 'Invalid Input'; + } else { + return 'Invalid Input'; + } } - return null; }, keyboardType: TextInputType.phone, maxLength: 10, diff --git a/lib/ui/authentication/mobile/sign_in_mobile.dart b/lib/ui/authentication/mobile/sign_in_mobile.dart index 22f7095..ef5daf9 100644 --- a/lib/ui/authentication/mobile/sign_in_mobile.dart +++ b/lib/ui/authentication/mobile/sign_in_mobile.dart @@ -6,17 +6,18 @@ import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class SignInMobile extends StatefulWidget { +class SignInMobile extends ConsumerStatefulWidget { const SignInMobile({super.key}); @override - State createState() => _SignInMobileState(); + ConsumerState createState() => _SignInMobileState(); } -class _SignInMobileState extends State { +class _SignInMobileState extends ConsumerState{ final _formKey = GlobalKey(); @override diff --git a/lib/ui/card_details/mobile/card_details_mobile.dart b/lib/ui/card_details/mobile/card_details_mobile.dart index 3a056e8..dc56873 100644 --- a/lib/ui/card_details/mobile/card_details_mobile.dart +++ b/lib/ui/card_details/mobile/card_details_mobile.dart @@ -1,37 +1,27 @@ +import 'package:cardtrading/framework/controllers/card_details/card_details_controller.dart'; +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; import 'package:cardtrading/ui/card_details/mobile/helper/card_details_icons.dart'; import 'package:cardtrading/ui/checkout/checkout.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; -import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class CardDetailsMobile extends StatefulWidget { - const CardDetailsMobile({super.key, required this.url}); +class CardDetailsMobile extends ConsumerStatefulWidget { + CardDetailsMobile({super.key, required this.url}); final String url; + final cartModel = CartModel(cardName: AppStrings.keyCardDescription, cardType: AppStrings.keyCardExclusive, cardQty: 1, cardPrice: AppStrings.keyCardPrice); @override - State createState() => _CardDetailsMobileState(); + ConsumerState createState() => _CardDetailsMobileState(); } -class _CardDetailsMobileState extends State { - bool isFavourite = false; - final keys = [ - AppStrings.keyCardSubjectName, - AppStrings.keyCardGrade, - AppStrings.keyCardBrand - ]; - final values = [ - AppStrings.keyCardSubjectNameValue, - AppStrings.keyCardGradeValue, - AppStrings.keyCardBrandValue - ]; - +class _CardDetailsMobileState extends ConsumerState { @override Widget build(BuildContext context) { return Scaffold( @@ -42,8 +32,7 @@ class _CardDetailsMobileState extends State { ), leading: IconButton( onPressed: () { - Navigator.pushReplacement(context, - MaterialPageRoute(builder: (context) => const HomeScreen())); + Navigator.pop(context); }, icon: const Icon(Icons.arrow_back)), centerTitle: true, @@ -69,7 +58,7 @@ class _CardDetailsMobileState extends State { _divider(), ListTile( title: Text( - AppStrings.keyCardDescription, + widget.cartModel.cardName, maxLines: 2, softWrap: true, style: TextStyles.medium.copyWith(color: AppColors.white), @@ -77,23 +66,23 @@ class _CardDetailsMobileState extends State { trailing: Row( mainAxisSize: MainAxisSize.min, children: [ - IconButton( - iconSize: 24, - padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), - onPressed: () { - setState( - () { - isFavourite - ? isFavourite = false - : isFavourite = true; - }, - ); - }, - icon: Icon( - isFavourite ? Icons.favorite : Icons.favorite_border, - color: AppColors.primary, - ), - ), + Consumer(builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final cardDetailsWatch = ref.watch(cardDetailsController); + return IconButton( + iconSize: 24, + padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), + onPressed: () { + cardDetailsWatch.setFavourite(); + }, + icon: Icon( + cardDetailsWatch.isFavourite + ? Icons.favorite + : Icons.favorite_border, + color: AppColors.primary, + ), + ); + }), Text( AppStrings.keyCardLikesCount, style: TextStyles.regular, @@ -111,7 +100,7 @@ class _CardDetailsMobileState extends State { color: AppColors.golden, child: Center( child: Text( - AppStrings.keyCardExclusive, + widget.cartModel.cardType, style: TextStyles.semiBold .copyWith(color: Colors.black, fontSize: 12.sp), ), @@ -137,34 +126,38 @@ class _CardDetailsMobileState extends State { Container( padding: const EdgeInsets.all(20.0), alignment: Alignment.topLeft, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ...List.generate( - keys.length, - (index) { - return RichText( - text: TextSpan( - text: keys[index], - style: TextStyles.regular.copyWith( - color: AppColors.lightGolden, fontSize: 12.sp), - children: [ - TextSpan( - text: values[index], - style: TextStyles.light.copyWith( - fontSize: 12.sp, - color: AppColors.lightGolden, + child: Consumer(builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final cardDetailsWatch = ref.watch(cardDetailsController); + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ...List.generate( + cardDetailsWatch.keys.length, + (index) { + return RichText( + text: TextSpan( + text: cardDetailsWatch.keys[index], + style: TextStyles.regular.copyWith( + color: AppColors.lightGolden, fontSize: 12.sp), + children: [ + TextSpan( + text: cardDetailsWatch.values[index], + style: TextStyles.light.copyWith( + fontSize: 12.sp, + color: AppColors.lightGolden, + ), ), - ), - ], - ), - textAlign: TextAlign.left, - ); - }, - ), - ], - ), + ], + ), + textAlign: TextAlign.left, + ); + }, + ), + ], + ); + }), ), _divider(), Container( @@ -185,35 +178,28 @@ class _CardDetailsMobileState extends State { color: AppColors.white, ), ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CardDetailsIcon( - svg: SvgPicture.asset( - '${AppAssets.svgLocation}shipping.svg', - width: 40.w, - height: 40.h, - ), - title: AppStrings.keyExpressShipping, - ), - CardDetailsIcon( - svg: SvgPicture.asset( - '${AppAssets.svgLocation}guarantee.svg', - width: 40.w, - height: 40.h, - ), - title: AppStrings.keyAuthenticGuarantee, - ), - CardDetailsIcon( - svg: SvgPicture.asset( - '${AppAssets.svgLocation}payment.svg', - width: 40.w, - height: 40.h, - ), - title: AppStrings.keySecurePayment, - ), - ], - ), + Consumer(builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final cardDetailsWatch = ref.watch(cardDetailsController); + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + ...List.generate( + cardDetailsWatch.cardDetailDescription.length, + (index) { + return CardDetailsIcon( + svg: SvgPicture.asset( + cardDetailsWatch.cardDetailIcons[index], + width: 40.w, + height: 40.h, + ), + title: + cardDetailsWatch.cardDetailDescription[index], + ); + }) + ], + ); + }), ], ), ), @@ -228,7 +214,7 @@ class _CardDetailsMobileState extends State { context, MaterialPageRoute( builder: (context) { - return const Checkout(); + return Checkout(cartModel: widget.cartModel,); }, ), ); diff --git a/lib/ui/card_shop/mobile/card_shop_mobile.dart b/lib/ui/card_shop/mobile/card_shop_mobile.dart index 167f938..b87ab6e 100644 --- a/lib/ui/card_shop/mobile/card_shop_mobile.dart +++ b/lib/ui/card_shop/mobile/card_shop_mobile.dart @@ -1,3 +1,5 @@ +import 'package:cardtrading/framework/controllers/card_shop/card_shop_controller.dart'; +import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; import 'package:cardtrading/ui/authentication/get_otp.dart'; import 'package:cardtrading/ui/card_shop/card_shop.dart'; import 'package:cardtrading/ui/home_screen/home_screen.dart'; @@ -8,20 +10,19 @@ import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/shop_card.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class CardShopMobile extends StatefulWidget { +class CardShopMobile extends ConsumerStatefulWidget { const CardShopMobile({super.key}); @override - State createState() => _CardShopMobileState(); + ConsumerState createState() => _CardShopMobileState(); } -class _CardShopMobileState extends State { +class _CardShopMobileState extends ConsumerState { final GlobalKey _globalKey = GlobalKey(); - int pageIndex = 0; - int id = 2; @override Widget build(BuildContext context) { @@ -52,7 +53,7 @@ class _CardShopMobileState extends State { child: Column( children: [ _tabBar(), - pageIndex == 0 + ref.watch(cardShopController).pageIndex == 0 ? Container( height: 30.h, margin: const EdgeInsets.all(20.0), @@ -93,7 +94,7 @@ class _CardShopMobileState extends State { ), ) : Container(), - pageIndex == 0 + ref.watch(cardShopController).pageIndex == 0 ? Container( width: 0.9.sw, padding: const EdgeInsets.symmetric(vertical: 8.0), @@ -118,95 +119,51 @@ class _CardShopMobileState extends State { ], ), ), - bottomNavigationBar: Padding( - padding: const EdgeInsets.only(bottom: 16.0), - child: BottomNavigationBar( - items: [ - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 0 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset(id != 0 - ? '${AppAssets.svgLocation}home.svg' - : '${AppAssets.svgLocation}home_primary.svg'), - ), - label: AppStrings.keyHome, - backgroundColor: AppColors.background), - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 1 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset(id == 1 - ? '${AppAssets.svgLocation}portfolio_primary.svg' - : '${AppAssets.svgLocation}portfolio.svg'), - ), - label: AppStrings.keyPortfolio, - backgroundColor: AppColors.background), - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 2 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset(id == 2 - ? '${AppAssets.svgLocation}store_primary.svg' - : '${AppAssets.svgLocation}store.svg'), - ), - label: AppStrings.keyStore, - backgroundColor: AppColors.background), - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 3 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset(id == 3 - ? '${AppAssets.svgLocation}profile_primary.svg' - : '${AppAssets.svgLocation}profile.svg'), + bottomNavigationBar: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final homeScreenWatch = ref.watch(homeScreenController); + return Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: BottomNavigationBar( + items: [ + ...List.generate( + 4, + (index) { + return BottomNavigationBarItem( + icon: Container( + padding: const EdgeInsets.only(top: 8.0), + decoration: BoxDecoration( + border: BorderDirectional( + top: BorderSide( + color: homeScreenWatch.id == index + ? AppColors.primary + : Colors.transparent, + width: 2.0, + ), + ), + ), + child: SvgPicture.asset(homeScreenWatch + .bottomNavigationBarSvgPath[index]), + ), + label: AppStrings.keyHome, + backgroundColor: AppColors.background); + }, ), - label: AppStrings.keyProfile, - backgroundColor: AppColors.background), - ], - selectedFontSize: 10.sp, - unselectedFontSize: 10.sp, - backgroundColor: AppColors.background, - currentIndex: id, - type: BottomNavigationBarType.shifting, - showUnselectedLabels: true, - selectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.primary, fontSize: 12.sp), - selectedItemColor: AppColors.primary, - unselectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.white, fontSize: 12.sp), - onTap: (index) { - setState( - () { - id = index; - if (id == 1 || id == 3) { + ], + selectedFontSize: 10.sp, + unselectedFontSize: 10.sp, + backgroundColor: AppColors.background, + currentIndex: homeScreenWatch.id, + type: BottomNavigationBarType.shifting, + showUnselectedLabels: true, + selectedLabelStyle: TextStyles.regular + .copyWith(color: AppColors.primary, fontSize: 12.sp), + selectedItemColor: AppColors.primary, + unselectedLabelStyle: TextStyles.regular + .copyWith(color: AppColors.white, fontSize: 12.sp), + onTap: (index) { + homeScreenWatch.setId(newId: index); + if (homeScreenWatch.id == 1 || homeScreenWatch.id == 3) { Navigator.push( context, MaterialPageRoute( @@ -216,7 +173,7 @@ class _CardShopMobileState extends State { ), ); } - id == 2 + homeScreenWatch.id == 2 ? Navigator.push( context, MaterialPageRoute( @@ -234,9 +191,9 @@ class _CardShopMobileState extends State { ), ); }, - ); - }, - ), + ), + ); + }, ), ); } @@ -250,73 +207,69 @@ class _CardShopMobileState extends State { ), ), margin: const EdgeInsets.symmetric(horizontal: 20.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - InkWell( - child: Container( - padding: const EdgeInsets.symmetric(vertical: 13.0), - decoration: pageIndex == 0 - ? const BoxDecoration( - border: Border( - top: BorderSide( - color: AppColors.primary, - width: 2.0, + child: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final cardShopWatcher = ref.watch(cardShopController); + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InkWell( + child: Container( + padding: const EdgeInsets.symmetric(vertical: 13.0), + decoration: cardShopWatcher.pageIndex == 0 + ? const BoxDecoration( + border: Border( + top: BorderSide( + color: AppColors.primary, + width: 2.0, + ), ), - ), - ) - : null, - child: Text( - AppStrings.keyCardExclusive, - style: TextStyles.regular.copyWith( - fontFamily: TextStyles.secondaryFontFamily, - color: pageIndex == 0 - ? AppColors.primary - : AppColors.indicatorColor, + ) + : null, + child: Text( + AppStrings.keyCardExclusive, + style: TextStyles.regular.copyWith( + fontFamily: TextStyles.secondaryFontFamily, + color: cardShopWatcher.pageIndex == 0 + ? AppColors.primary + : AppColors.indicatorColor, + ), ), ), + onTap: () { + cardShopWatcher.setOrIncrementPageIndex(index: 0); + }, ), - onTap: () { - setState( - () { - pageIndex = 0; - }, - ); - }, - ), - InkWell( - child: Container( - padding: const EdgeInsets.symmetric(vertical: 13.0), - decoration: pageIndex == 1 - ? const BoxDecoration( - border: Border( - top: BorderSide( - color: AppColors.primary, - width: 2.0, + InkWell( + child: Container( + padding: const EdgeInsets.symmetric(vertical: 13.0), + decoration: cardShopWatcher.pageIndex == 1 + ? const BoxDecoration( + border: Border( + top: BorderSide( + color: AppColors.primary, + width: 2.0, + ), ), - ), - ) - : null, - child: Text( - AppStrings.keyOpenStore, - style: TextStyles.regular.copyWith( - fontFamily: TextStyles.secondaryFontFamily, - color: pageIndex == 1 - ? AppColors.primary - : AppColors.indicatorColor, + ) + : null, + child: Text( + AppStrings.keyOpenStore, + style: TextStyles.regular.copyWith( + fontFamily: TextStyles.secondaryFontFamily, + color: cardShopWatcher.pageIndex == 1 + ? AppColors.primary + : AppColors.indicatorColor, + ), ), ), + onTap: () { + cardShopWatcher.setOrIncrementPageIndex(index: 1); + }, ), - onTap: () { - setState( - () { - pageIndex = 1; - }, - ); - }, - ), - ], - ), + ], + ); + }), ); } } diff --git a/lib/ui/checkout/checkout.dart b/lib/ui/checkout/checkout.dart index 147de26..d46d664 100644 --- a/lib/ui/checkout/checkout.dart +++ b/lib/ui/checkout/checkout.dart @@ -1,17 +1,19 @@ +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; import 'package:cardtrading/ui/checkout/mobile/checkout_mobile.dart'; import 'package:flutter/material.dart'; import 'package:responsive_builder/responsive_builder.dart'; class Checkout extends StatelessWidget { - const Checkout({super.key}); + const Checkout({super.key, this.cartModel}); + final CartModel? cartModel; @override Widget build(BuildContext context) { return ResponsiveBuilder(builder: (context,sizingInformation){ if(sizingInformation.isMobile){ - return const CheckoutMobile(); + return CheckoutMobile(cartModel:cartModel); } - return const CheckoutMobile(); + return CheckoutMobile(cartModel: cartModel,); }); } } diff --git a/lib/ui/checkout/mobile/checkout_mobile.dart b/lib/ui/checkout/mobile/checkout_mobile.dart index bc00cc8..b7a518c 100644 --- a/lib/ui/checkout/mobile/checkout_mobile.dart +++ b/lib/ui/checkout/mobile/checkout_mobile.dart @@ -1,3 +1,4 @@ +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; import 'package:cardtrading/ui/checkout/mobile/helper/checkout_list.dart'; import 'package:cardtrading/ui/home_screen/home_screen.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; @@ -6,10 +7,19 @@ import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -class CheckoutMobile extends StatelessWidget { - const CheckoutMobile({super.key}); +class CheckoutMobile extends ConsumerStatefulWidget { + const CheckoutMobile({this.cartModel,super.key}); + final CartModel? cartModel; + + @override + ConsumerState createState() => _CheckoutMobileState(); +} + +class _CheckoutMobileState extends ConsumerState { @override Widget build(BuildContext context) { @@ -30,211 +40,230 @@ class CheckoutMobile extends StatelessWidget { backgroundColor: AppColors.background, ), body: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - ...List.generate( - 2, - (index) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - CheckoutList(url: '${AppAssets.imgLocation}card_0.png'), - Divider( - thickness: 1.h, - ), - ], - ); - }, - ), - Padding( - padding: const EdgeInsets.all(20.0), - child: Text( - AppStrings.keyPaymentSummary, - textAlign: TextAlign.start, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - color: AppColors.golden, - ), - ), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, + child: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final checkoutWatch = ref.watch(checkoutController); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + ...List.generate( + checkoutWatch.cartList.length, + (index) { + return Column( + mainAxisSize: MainAxisSize.min, children: [ - Text( - AppStrings.keyTotalAmount, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.containerText, - ), - ), - Text( - AppStrings.keyTotalAmountValue, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), + CheckoutList(checkoutWatch.cartList[index], index, () { + checkoutWatch.deleteCardFromCartList(index); + }, url: '${AppAssets.imgLocation}card_0.png'), + Divider( + thickness: 1.h, ), ], + ); + }, + ), + Padding( + padding: const EdgeInsets.all(20.0), + child: Text( + AppStrings.keyPaymentSummary, + textAlign: TextAlign.start, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + color: AppColors.golden, ), ), - Divider( - thickness: 1.h, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keyDiscount, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.containerText, - ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyTotalAmount, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.containerText, + ), + ), + Text( + AppStrings.keyTotalAmountValue, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ], ), - Text( - AppStrings.keyDash, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), + ), + Divider( + thickness: 1.h, + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyDiscount, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.containerText, + ), + ), + Text( + AppStrings.keyDash, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ], ), - ], - ), - ), - Divider( - thickness: 1.h, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keyDeliveryCharges, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.containerText, - ), + ), + Divider( + thickness: 1.h, + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyDeliveryCharges, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.containerText, + ), + ), + Text( + AppStrings.keyDash, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ], ), - Text( - AppStrings.keyDash, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), + ), + Divider( + thickness: 1.h, + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keySubTotal, + style: TextStyles.semiBold.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + Text( + AppStrings.keySubTotalValue, + style: TextStyles.semiBold.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ], ), - ], - ), - ), - Divider( - thickness: 1.h, + ), + ], ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), + ), + SizedBox( + height: 50.h, + ), + Padding( + padding: const EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 34.0), + child: SizedBox( + width: double.infinity, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - AppStrings.keySubTotal, - style: TextStyles.semiBold.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, + Container( + width: 54.w, + height: 54.h, + decoration: BoxDecoration( + border: Border.all(color: AppColors.primary)), + child: Center( + child: InkWell( + child: const Icon( + Icons.add, + color: AppColors.primary, + size: 24, + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); + }, + ), ), ), - Text( - AppStrings.keySubTotalValue, - style: TextStyles.semiBold.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, + SizedBox( + height: 54.h, + width: 261.w, + child: CommonButton( + buttonText: '', + prefixWidget: Text( + AppStrings.keyCheckout, + style: TextStyles.semiBold.copyWith( + fontSize: 16.sp, + color: AppColors.dividerColor), + ), + buttonPadding: + const EdgeInsets.symmetric(horizontal: 20), + buttonBackgroundColor: AppColors.primary, + suffixWidget: const Icon( + Icons.arrow_forward, + color: AppColors.dividerColor, + ), ), ), ], ), ), - ], - ), - ), - SizedBox( - height: 50.h, - ), - Padding( - padding: const EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 34.0), - child: SizedBox( - width: double.infinity, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - width: 54.w, - height: 54.h, - decoration: BoxDecoration( - border: Border.all(color: AppColors.primary)), - child: Center( - child: InkWell( - child: const Icon( - Icons.add, - color: AppColors.primary, - size: 24, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); - }, - ), - ), - ), - SizedBox( - height: 54.h, - width: 261.w, - child: CommonButton( - buttonText: '', - prefixWidget: Text( - AppStrings.keyCheckout, - style: TextStyles.semiBold.copyWith( - fontSize: 16.sp, color: AppColors.dividerColor), - ), - buttonPadding: const EdgeInsets.symmetric(horizontal: 20), - buttonBackgroundColor: AppColors.primary, - suffixWidget: const Icon( - Icons.arrow_forward, - color: AppColors.dividerColor, - ), - ), - ), - ], ), - ), - ), - ], + ], + ); + }, ), ), ); } + + @override + void initState() { + super.initState(); + SchedulerBinding.instance.addPostFrameCallback((_) { + if(widget.cartModel != null){ + ref.watch(checkoutController).addCard(widget.cartModel as CartModel); + } + }); + } } diff --git a/lib/ui/checkout/mobile/helper/checkout_list.dart b/lib/ui/checkout/mobile/helper/checkout_list.dart index 99c21f7..5b446d3 100644 --- a/lib/ui/checkout/mobile/helper/checkout_list.dart +++ b/lib/ui/checkout/mobile/helper/checkout_list.dart @@ -1,22 +1,25 @@ +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class CheckoutList extends StatefulWidget { - const CheckoutList({super.key, required this.url}); - +class CheckoutList extends ConsumerStatefulWidget { + const CheckoutList(this.cartModel, this.index, this.onRemoveTap, {super.key, required this.url}); final String url; + final CartModel cartModel; + final int index; + final void Function()? onRemoveTap; @override - State createState() => _CheckoutListState(); + ConsumerState createState() => _CheckoutListState(); } -class _CheckoutListState extends State { - int itemCount = 1; +class _CheckoutListState extends ConsumerState { @override Widget build(BuildContext context) { @@ -47,7 +50,7 @@ class _CheckoutListState extends State { SizedBox( width: 179.w, child: Text( - AppStrings.keyCardDescription, + widget.cartModel.cardName, softWrap: true, maxLines: 2, style: TextStyles.regular.copyWith( @@ -61,7 +64,7 @@ class _CheckoutListState extends State { height: 10.h, ), Text( - AppStrings.keyCardExclusive, + widget.cartModel.cardType, style: TextStyles.regular.copyWith( fontFamily: 'Sora', fontSize: 12.sp, @@ -70,56 +73,53 @@ class _CheckoutListState extends State { SizedBox( height: 13.h, ), - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - InkWell( - onTap: () { - setState( - () { - itemCount >= 1 ? itemCount-- : itemCount = 0; + Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final checkoutWatch = ref.watch(checkoutController); + return Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + InkWell( + onTap: () { + checkoutWatch.decreaseQty(widget.index); }, - ); - }, - child: Container( - width: 24.w, - height: 24.w, - padding: const EdgeInsets.only(right: 16.0), - child: const Icon( - Icons.remove, - color: AppColors.greyText, - size: 12, + child: Container( + width: 24.w, + height: 24.w, + padding: const EdgeInsets.only(right: 16.0), + child: const Icon( + Icons.remove, + color: AppColors.greyText, + size: 12, + ), + ), ), - ), - ), - Text( - itemCount.toString(), - style: TextStyles.regular.copyWith( - fontSize: 14.sp, - color: AppColors.white, - fontFamily: 'Sora'), - ), - InkWell( - onTap: () { - setState( - () { - itemCount++; + Text( + checkoutWatch.cartList[widget.index].cardQty.toString(), + style: TextStyles.regular.copyWith( + fontSize: 14.sp, + color: AppColors.white, + fontFamily: 'Sora'), + ), + InkWell( + onTap: () { + checkoutWatch.increaseQty(widget.index); }, - ); - }, - child: Container( - width: 24.w, - height: 24.h, - padding: const EdgeInsets.only(left: 8.0), - child: const Icon( - Icons.add, - color: AppColors.primary, - size: 12, + child: Container( + width: 24.w, + height: 24.h, + padding: const EdgeInsets.only(left: 8.0), + child: const Icon( + Icons.add, + color: AppColors.primary, + size: 12, + ), + ), ), - ), - ), - ], + ], + ); + } ), SizedBox( height: 18.h, @@ -134,13 +134,7 @@ class _CheckoutListState extends State { ], ), InkWell( - onTap: () { - setState( - () { - itemCount = 0; - }, - ); - }, + onTap: widget.onRemoveTap, child: SvgPicture.asset( '${AppAssets.svgLocation}delete_bin.svg', width: 20.w, diff --git a/lib/ui/choose_language/mobile/choose_language_mobile.dart b/lib/ui/choose_language/mobile/choose_language_mobile.dart index 48d9acc..3177a4f 100644 --- a/lib/ui/choose_language/mobile/choose_language_mobile.dart +++ b/lib/ui/choose_language/mobile/choose_language_mobile.dart @@ -1,22 +1,22 @@ +import 'package:cardtrading/framework/controllers/choose_language/choose_language_controller.dart'; import 'package:cardtrading/ui/onboarding/onboarding.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -class ChooseLanguageMobile extends StatefulWidget { +class ChooseLanguageMobile extends ConsumerStatefulWidget { const ChooseLanguageMobile({super.key}); @override - State createState() => _ChooseLanguageMobileState(); + ConsumerState createState() => + _ChooseLanguageMobileState(); } -class _ChooseLanguageMobileState extends State { - List languages = ['English', 'عربي']; - String selectedLanguage = 'English'; - +class _ChooseLanguageMobileState extends ConsumerState { @override Widget build(BuildContext context) { return Scaffold( @@ -71,40 +71,43 @@ class _ChooseLanguageMobileState extends State { List _languageButtons() { return List.generate( - languages.length, + ref.watch(chooseLanguageController).languages.length, (index) { - return Padding( - padding: EdgeInsets.only(bottom: 25.h), - child: CommonButton( - align: TextAlign.left, - buttonHeight: 46.h, - onPressed: () { - setState( - () { - selectedLanguage = languages[index]; - }, - ); - }, - buttonPadding: EdgeInsets.symmetric(horizontal: 15.w), - buttonBackgroundColor: selectedLanguage == languages[index] - ? AppColors.primary - : AppColors.buttonBg, - buttonText: languages[index], - suffixWidget: selectedLanguage == languages[index] - ? const Icon( - Icons.check, - color: Colors.black, - ) - : null, - buttonTextStyle: TextStyles.light.copyWith( - color: selectedLanguage == languages[index] - ? AppColors.selectedButtonText - : AppColors.buttonText, - fontSize: 14.sp, - fontFamily: 'Sora', + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final chooseLanguageWatch = ref.watch(chooseLanguageController); + return Padding( + padding: EdgeInsets.only(bottom: 25.h), + child: CommonButton( + align: TextAlign.left, + buttonHeight: 46.h, + onPressed: () { + chooseLanguageWatch.changeLanguage(index); + }, + buttonPadding: EdgeInsets.symmetric(horizontal: 15.w), + buttonBackgroundColor: chooseLanguageWatch.selectedLanguage == + chooseLanguageWatch.languages[index] + ? AppColors.primary + : AppColors.buttonBg, + buttonText: chooseLanguageWatch.languages[index], + suffixWidget: chooseLanguageWatch.selectedLanguage == + chooseLanguageWatch.languages[index] + ? const Icon( + Icons.check, + color: Colors.black, + ) + : null, + buttonTextStyle: TextStyles.light.copyWith( + color: chooseLanguageWatch.selectedLanguage == + chooseLanguageWatch.languages[index] + ? AppColors.selectedButtonText + : AppColors.buttonText, + fontSize: 14.sp, + fontFamily: 'Sora', + ), ), - ), - ); + ); + }); }, ); } diff --git a/lib/ui/complete_your_profile/mobile/add_address_mobile.dart b/lib/ui/complete_your_profile/mobile/add_address_mobile.dart index c722cb3..84b5eea 100644 --- a/lib/ui/complete_your_profile/mobile/add_address_mobile.dart +++ b/lib/ui/complete_your_profile/mobile/add_address_mobile.dart @@ -1,3 +1,4 @@ +import 'package:cardtrading/framework/controllers/complete_your_profile/add_address_controller.dart'; import 'package:cardtrading/ui/home_screen/home_screen.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; @@ -6,23 +7,19 @@ import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class AddAddressMobile extends StatefulWidget { +class AddAddressMobile extends ConsumerStatefulWidget { const AddAddressMobile({super.key}); @override - State createState() => _AddAddressMobileState(); + ConsumerState createState() => _AddAddressMobileState(); } -class _AddAddressMobileState extends State { +class _AddAddressMobileState extends ConsumerState { final _formKey = GlobalKey(); - String? area, block, street; - int id = 0; - List areas = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List blocks = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List streets = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; @override Widget build(BuildContext context) { @@ -56,423 +53,365 @@ class _AddAddressMobileState extends State { key: _formKey, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: Column( - children: [ - Expanded( - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( + child: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final addAddressWatch = ref.watch(addAddressController); + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded( - flex: 3, - child: SizedBox( - width: 180, - child: Text( - AppStrings.keyEnterYourAddress, - softWrap: true, - maxLines: 3, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, - height: 1.5, + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 3, + child: SizedBox( + width: 180, + child: Text( + AppStrings.keyEnterYourAddress, + softWrap: true, + maxLines: 3, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + height: 1.5, + ), + ), ), ), + const Spacer(), + ...List.generate( + 2, + (index) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + width: 8.w, + height: 8.h, + decoration: const BoxDecoration( + color: AppColors.primary), + ), + ); + }, + ), + ], + ), + SizedBox( + height: 15.h, + ), + Text( + AppStrings.keyEnterYourAddressContent, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + height: 1.5, ), ), - const Spacer(), - ...List.generate( - 2, - (index) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: Container( - width: 8.w, - height: 8.h, - decoration: const BoxDecoration( - color: AppColors.primary), - ), - ); - }, + SizedBox( + height: 25.h, ), - ], - ), - SizedBox( - height: 15.h, - ), - Text( - AppStrings.keyEnterYourAddressContent, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - height: 1.5, - ), - ), - SizedBox( - height: 25.h, - ), - DropdownButtonFormField2( - isExpanded: true, - decoration: const InputDecoration( - border: InputBorder.none, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: EdgeInsets.all(16.0), - ), - onMenuStateChange: (isChanged) { - _formKey.currentState!.validate(); - }, - validator: (value) { - if (!areas.contains(value)) { - return 'This Field is mandatory'; - } - return null; - }, - items: areas - .map( - (String item) => DropdownMenuItem( - value: item, - child: Text( - item, - style: TextStyles.light.copyWith( - color: AppColors.buttonText, - ), - ), - ), - ) - .toList(), - value: area, - hint: Text( - 'Area*', - style: TextStyles.light - .copyWith(color: AppColors.buttonText), - ), - onChanged: (value) { - setState( - () { - area = value; + DropdownButtonFormField2( + isExpanded: true, + decoration: const InputDecoration( + border: InputBorder.none, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: EdgeInsets.all(16.0), + ), + onMenuStateChange: (isChanged) { + _formKey.currentState!.validate(); }, - ); - }, - ), - SizedBox( - height: 20.h, - ), - DropdownButtonFormField2( - isExpanded: true, - decoration: const InputDecoration( - border: InputBorder.none, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: EdgeInsets.all(16.0), - ), - onMenuStateChange: (isChanged) { - _formKey.currentState!.validate(); - }, - validator: (value) { - if (!blocks.contains(value)) { - return 'This Field is mandatory'; - } - return null; - }, - items: blocks - .map( - (String item) => DropdownMenuItem( - value: item, - child: Text( - item, - style: TextStyles.light.copyWith( - color: AppColors.buttonText, - ), - ), - ), - ) - .toList(), - value: block, - hint: Text( - 'Block*', - style: TextStyles.light - .copyWith(color: AppColors.buttonText), - ), - onChanged: (value) { - setState( - () { - block = value; + validator: (value) { + if (!addAddressWatch.areas.contains(value)) { + return 'This Field is mandatory'; + } + return null; }, - ); - }, - ), - SizedBox( - height: 20.h, - ), - DropdownButtonFormField2( - isExpanded: true, - decoration: const InputDecoration( - border: InputBorder.none, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: EdgeInsets.all(16.0), - ), - onMenuStateChange: (isChanged) { - _formKey.currentState!.validate(); - }, - validator: (value) { - if (!streets.contains(value)) { - return 'This Field is mandatory'; - } - return null; - }, - items: streets - .map( - (String item) => DropdownMenuItem( - value: item, - child: Text( - item, - style: TextStyles.light.copyWith( - color: AppColors.buttonText, + items: addAddressWatch.areas + .map( + (String item) => DropdownMenuItem( + value: item, + child: Text( + item, + style: TextStyles.light.copyWith( + color: AppColors.buttonText, + ), + ), ), - ), - ), - ) - .toList(), - value: street, - hint: Text( - 'Street*', - style: TextStyles.light - .copyWith(color: AppColors.buttonText), - ), - onChanged: (value) { - setState( - () { - street = value; + ) + .toList(), + value: addAddressWatch.area, + hint: Text( + 'Area*', + style: TextStyles.light + .copyWith(color: AppColors.buttonText), + ), + onChanged: (value) { + addAddressWatch.setArea(value); }, - ); - }, - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyAvenue, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyBuilding, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, + SizedBox( + height: 20.h, ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyFloor, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, + DropdownButtonFormField2( + isExpanded: true, + decoration: const InputDecoration( + border: InputBorder.none, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: EdgeInsets.all(16.0), + ), + onMenuStateChange: (isChanged) { + _formKey.currentState!.validate(); + }, + validator: (value) { + if (!addAddressWatch.blocks.contains(value)) { + return 'This Field is mandatory'; + } + return null; + }, + items: addAddressWatch.blocks + .map( + (String item) => DropdownMenuItem( + value: item, + child: Text( + item, + style: TextStyles.light.copyWith( + color: AppColors.buttonText, + ), + ), + ), + ) + .toList(), + value: addAddressWatch.block, + hint: Text( + 'Block*', + style: TextStyles.light + .copyWith(color: AppColors.buttonText), + ), + onChanged: (value) { + addAddressWatch.setBlock(value); + }, ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - validator: (value) { - if (value!.length > 1) { - return null; - } - return 'This field is mandatory.'; - }, - onChanged: (value) { - _formKey.currentState!.validate(); - }, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyHouseNo, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, + SizedBox( + height: 20.h, ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - Text( - AppStrings.keyAddressType, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - height: 1.5, - ), - ), - SizedBox( - height: 10.h, - ), - Row( - children: [ - InkWell( - child: Container( - decoration: BoxDecoration( - color: id == 0 - ? AppColors.primary - : AppColors.buttonBg, - ), - padding: EdgeInsets.symmetric( - horizontal: 16.0.w, vertical: 8.0.h), - child: Text( - AppStrings.keyAddressTypeOne, - style: TextStyles.regular.copyWith( - color: id == 0 - ? AppColors.selectedButtonText - : AppColors.greyText, - fontSize: 12.sp, - ), - ), + DropdownButtonFormField2( + isExpanded: true, + decoration: const InputDecoration( + border: InputBorder.none, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: EdgeInsets.all(16.0), ), - onTap: () { - setState( - () { - id = 0; - }, - ); + onMenuStateChange: (isChanged) { + _formKey.currentState!.validate(); + }, + validator: (value) { + if (!addAddressWatch.streets.contains(value)) { + return 'This Field is mandatory'; + } + return null; + }, + items: addAddressWatch.streets + .map( + (String item) => DropdownMenuItem( + value: item, + child: Text( + item, + style: TextStyles.light.copyWith( + color: AppColors.buttonText, + ), + ), + ), + ) + .toList(), + value: addAddressWatch.street, + hint: Text( + 'Street*', + style: TextStyles.light + .copyWith(color: AppColors.buttonText), + ), + onChanged: (value) { + addAddressWatch.setStreet(value); }, ), SizedBox( - width: 10.0.w, + height: 20.h, ), - InkWell( - child: Container( - decoration: BoxDecoration( - color: id == 1 - ? AppColors.primary - : AppColors.buttonBg, - ), - padding: EdgeInsets.symmetric( - horizontal: 16.0.w, vertical: 8.0.h), - child: Text( - AppStrings.keyAddressTypeTwo, - style: TextStyles.regular.copyWith( - color: id == 1 - ? AppColors.selectedButtonText - : AppColors.greyText, - fontSize: 12.sp, - ), + TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyAvenue, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, ), + border: InputBorder.none, ), - onTap: () { - setState( - () { - id = 1; - }, - ); - }, ), SizedBox( - width: 10.0.w, + height: 20.h, ), - InkWell( - child: Container( - decoration: BoxDecoration( - color: id == 2 - ? AppColors.primary - : AppColors.buttonBg, + TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyBuilding, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, ), - padding: EdgeInsets.symmetric( - horizontal: 16.0.w, vertical: 8.0.h), - child: Text( - AppStrings.keyAddressTypeThree, - style: TextStyles.regular.copyWith( - color: id == 2 - ? AppColors.selectedButtonText - : AppColors.greyText, - fontSize: 12.sp, - ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyFloor, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, ), + border: InputBorder.none, ), - onTap: () { - setState( - () { - id = 2; - }, - ); + ), + SizedBox( + height: 20.h, + ), + TextFormField( + cursorColor: AppColors.primary, + validator: (value) { + if (value!.length > 1) { + return null; + } + return 'This field is mandatory.'; + }, + onChanged: (value) { + _formKey.currentState!.validate(); }, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyHouseNo, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + Text( + AppStrings.keyAddressType, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + height: 1.5, + ), + ), + SizedBox( + height: 10.h, ), + Row( + children: [ + ...List.generate( + 3, + (index) { + return Row( + children: [ + InkWell( + child: Container( + decoration: BoxDecoration( + color: addAddressWatch.id == index + ? AppColors.primary + : AppColors.buttonBg, + ), + padding: EdgeInsets.symmetric( + horizontal: 16.0.w, + vertical: 8.0.h), + child: Text( + addAddressWatch.addressTypes[index], + style: TextStyles.regular.copyWith( + color: addAddressWatch.id == index + ? AppColors.selectedButtonText + : AppColors.greyText, + fontSize: 12.sp, + ), + ), + ), + onTap: () { + addAddressWatch.setId(index); + }, + ), + SizedBox( + width: 10.0.w, + ), + ], + ); + }, + ), + ], + ) ], - ) - ], - ), - ), - ), - Padding( - padding: EdgeInsets.symmetric(vertical: 24.h), - child: CommonButton( - buttonPadding: const EdgeInsets.all(8.0), - prefixWidget: Text( - AppStrings.keySignUp, - style: TextStyles.semiBold.copyWith( - color: AppColors.selectedButtonText, - fontSize: 16.sp, + ), ), ), - buttonText: ' ', - suffixWidget: const Icon( - Icons.arrow_forward_outlined, - color: AppColors.selectedButtonText, - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - _formKey.currentState!.save(); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, + Padding( + padding: EdgeInsets.symmetric(vertical: 24.h), + child: CommonButton( + buttonPadding: const EdgeInsets.all(8.0), + prefixWidget: Text( + AppStrings.keySignUp, + style: TextStyles.semiBold.copyWith( + color: AppColors.selectedButtonText, + fontSize: 16.sp, ), - ); - } - }, - ), - ), - ], + ), + buttonText: ' ', + suffixWidget: const Icon( + Icons.arrow_forward_outlined, + color: AppColors.selectedButtonText, + ), + onPressed: () { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); + } + }, + ), + ), + ], + ); + }, ), ), ), diff --git a/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart b/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart index 5c4e1dc..bac7f9b 100644 --- a/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart +++ b/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart @@ -1,3 +1,4 @@ +import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profie_controller.dart'; import 'package:cardtrading/ui/complete_your_profile/add_address.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; @@ -6,18 +7,19 @@ import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:email_validator/email_validator.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class CompleteProfileMobile extends StatefulWidget { +class CompleteProfileMobile extends ConsumerStatefulWidget { const CompleteProfileMobile({super.key}); @override - State createState() => _CompleteProfileMobileState(); + ConsumerState createState() => + _CompleteProfileMobileState(); } -class _CompleteProfileMobileState extends State { - bool haveReferral = false; +class _CompleteProfileMobileState extends ConsumerState { final _formKey = GlobalKey(); @override @@ -142,73 +144,79 @@ class _CompleteProfileMobileState extends State { SizedBox( height: 20.h, ), - InkWell( - onTap: () { - setState( - () { - haveReferral = true; + Consumer( + builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final completeProfileWatch = + ref.watch(completeProfileController); + return InkWell( + onTap: () { + completeProfileWatch.addReferral(); }, + child: Text( + AppStrings.keyHaveReferral, + style: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.primary, + fontSize: 12.sp, + decoration: TextDecoration.underline, + decorationColor: AppColors.primary, + ), + ), ); }, - child: Text( - AppStrings.keyHaveReferral, - style: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.primary, - fontSize: 12.sp, - decoration: TextDecoration.underline, - decorationColor: AppColors.primary, - ), - ), ), SizedBox( height: 20.h, ), - Visibility( - visible: haveReferral, - child: TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - hintText: AppStrings.keyEnterReferral, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: const EdgeInsets.symmetric( - horizontal: 12.0, vertical: 20.0), - suffixIcon: InkWell( - onTap: () { - setState( - () { - haveReferral = false; + Consumer( + builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final completeProfileWatch = + ref.watch(completeProfileController); + return Visibility( + visible: completeProfileWatch.hasReferral, + child: TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + hintText: AppStrings.keyEnterReferral, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: const EdgeInsets.symmetric( + horizontal: 12.0, vertical: 20.0), + suffixIcon: InkWell( + onTap: () { + completeProfileWatch.addReferral(); }, - ); - }, - child: Container( - width: 87.w, - height: 54.h, - padding: EdgeInsets.zero, - color: AppColors.primary, - child: Center( - child: Text( - AppStrings.keyApply, - textAlign: TextAlign.center, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - fontFamily: 'Sora', - backgroundColor: AppColors.primary, - color: AppColors.selectedButtonText, + child: Container( + width: 87.w, + height: 54.h, + padding: EdgeInsets.zero, + color: AppColors.primary, + child: Center( + child: Text( + AppStrings.keyApply, + textAlign: TextAlign.center, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + fontFamily: 'Sora', + backgroundColor: AppColors.primary, + color: AppColors.selectedButtonText, + ), + ), ), ), ), + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, ), ), - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), + ); + }, ), ], ), diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawe_body.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawe_body.dart deleted file mode 100644 index 260d9e9..0000000 --- a/lib/ui/home_screen/mobile/helper/home_screen_drawe_body.dart +++ /dev/null @@ -1,156 +0,0 @@ -import 'package:cardtrading/ui/about_us/about_us.dart'; -import 'package:cardtrading/ui/about_us/terms_and_condition.dart'; -import 'package:cardtrading/ui/authentication/sign_in.dart'; -import 'package:cardtrading/ui/choose_language/choose_language.dart'; -import 'package:cardtrading/ui/home_screen/mobile/home_screen_mobile.dart'; -import 'package:cardtrading/ui/terms_and_condition/subscription.dart'; -import 'package:cardtrading/ui/utils/theme/assets.dart'; -import 'package:cardtrading/ui/utils/theme/colors.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/svg.dart'; - -class HomeScreenDrawerBody extends StatefulWidget { - const HomeScreenDrawerBody({super.key}); - - @override - State createState() => _HomeScreenDrawerBodyState(); -} - -class _HomeScreenDrawerBodyState extends State { - final List list = [ - ///List of items in Home Screen drawer - 'Home', - 'My Orders', - 'Favourites', - 'Subscription Plan', - 'Rewards', - 'Terms & Conditions', - 'Change Language', - 'Refer & Earn', - 'Contact Us', - 'About us', - 'FAQ', - ]; - int id = 0; - - @override - Widget build(BuildContext context) { - - ///Drawer for Home Screen - return Padding( - padding: EdgeInsets.all(8.0.r), - child: ListView.separated( - shrinkWrap: true, - physics: const BouncingScrollPhysics(), - scrollDirection: Axis.vertical, - itemBuilder: (context, index) { - return ListTile( - title: Text( - list[index], - style: TextStyles.medium.copyWith( - color: - index == id ? AppColors.primary : AppColors.greyText), - ), - onTap: () { - if (index == 0) { - setState( - () { - id = 0; - }, - ); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreenMobile(); - }, - ), - ); - } else if (index == 3) { - setState( - () { - id = 3; - }, - ); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const Subscription(); - }, - ), - ); - } else if (index == 5) { - setState( - () { - id = 5; - }, - ); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const TermsAndCondition(); - }, - ), - ); - } else if (index == 6) { - setState( - () { - id = 6; - }, - ); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const ChooseLanguage(); - }, - ), - ); - } else if (index == 9) { - setState( - () { - id = 9; - }, - ); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const AboutUs(); - }, - ), - ); - } else { - setState( - () { - id = 0; - }, - ); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const SignIn(); - }, - ), - ); - } - }, - trailing: index == 0 - ? null - : SvgPicture.asset('${AppAssets.svgLocation}arrow_right.svg'), - ); - }, - separatorBuilder: (context, index) { - return Divider( - height: 1.h, - ); - }, - itemCount: 11), - ); - } -} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart index fc8b2f1..ccaa6af 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart @@ -1,20 +1,21 @@ -import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawe_body.dart'; +import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; +import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer_body.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class HomeScreenDrawer extends StatefulWidget { +class HomeScreenDrawer extends ConsumerStatefulWidget { const HomeScreenDrawer({super.key}); @override - State createState() => _HomeScreenDrawerState(); + ConsumerState createState() => _HomeScreenDrawerState(); } -class _HomeScreenDrawerState extends State { - String url = '${AppAssets.svgLocation}dark_mode.svg'; +class _HomeScreenDrawerState extends ConsumerState { @override Widget build(BuildContext context) { @@ -35,25 +36,24 @@ class _HomeScreenDrawerState extends State { title: const Text(AppStrings.keyWalterWhite), centerTitle: true, actions: [ - InkWell( - onTap: () { - setState( - () { - url == '${AppAssets.svgLocation}dark_mode.svg' - ? url = '${AppAssets.svgLocation}light_mode.svg' - : url = '${AppAssets.svgLocation}dark_mode.svg'; + Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final homeScreenWatch = ref.watch(homeScreenController); + return InkWell( + onTap: () { + homeScreenWatch.changeMode(); }, + child: Padding( + padding: EdgeInsets.all(8.0.r), + child: SvgPicture.asset(homeScreenWatch.url), + ), ); - }, - child: Padding( - padding: EdgeInsets.all(8.0.r), - child: SvgPicture.asset(url), - ), + } ), ], ), backgroundColor: AppColors.background, - body: HomeScreenDrawerBody(), + body: const HomeScreenDrawerBody(), ); } } diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart new file mode 100644 index 0000000..51f14b5 --- /dev/null +++ b/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart @@ -0,0 +1,124 @@ +import 'package:cardtrading/framework/controllers/home_screen/drawer_controller.dart'; +import 'package:cardtrading/ui/about_us/about_us.dart'; +import 'package:cardtrading/ui/about_us/terms_and_condition.dart'; +import 'package:cardtrading/ui/authentication/sign_in.dart'; +import 'package:cardtrading/ui/choose_language/choose_language.dart'; +import 'package:cardtrading/ui/home_screen/mobile/home_screen_mobile.dart'; +import 'package:cardtrading/ui/subscription_plan/subscription.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/svg.dart'; + +class HomeScreenDrawerBody extends ConsumerStatefulWidget { + const HomeScreenDrawerBody({super.key}); + + @override + ConsumerState createState() => _HomeScreenDrawerBodyState(); +} + +class _HomeScreenDrawerBodyState extends ConsumerState { + + @override + Widget build(BuildContext context) { + + ///Drawer for Home Screen + return Padding( + padding: EdgeInsets.all(8.0.r), + child: ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + scrollDirection: Axis.vertical, + itemBuilder: (context, index) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final homeScreenDrawerWatch = ref.watch(homeScreenDrawerController); + return ListTile( + title: Text( + homeScreenDrawerWatch.list[index], + style: TextStyles.medium.copyWith( + color: + index == homeScreenDrawerWatch.id ? AppColors.primary : AppColors.greyText), + ), + onTap: () { + if (index == 0) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreenMobile(); + }, + ), + ); + } else if (index == 3) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const Subscription(); + }, + ), + ); + } else if (index == 5) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const TermsAndCondition(); + }, + ), + ); + } else if (index == 6) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const ChooseLanguage(); + }, + ), + ); + } else if (index == 9) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const AboutUs(); + }, + ), + ); + } else { + homeScreenDrawerWatch.setOrIncrementId(newId: 0); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const SignIn(); + }, + ), + ); + } + }, + trailing: index == homeScreenDrawerWatch.id + ? null + : SvgPicture.asset('${AppAssets.svgLocation}arrow_right.svg'), + ); + }, + ); + }, + separatorBuilder: (context, index) { + return Divider( + height: 1.h, + ); + }, + itemCount: 11), + ); + } +} diff --git a/lib/ui/home_screen/mobile/home_screen_mobile.dart b/lib/ui/home_screen/mobile/home_screen_mobile.dart index c9c7ce1..3a991e3 100644 --- a/lib/ui/home_screen/mobile/home_screen_mobile.dart +++ b/lib/ui/home_screen/mobile/home_screen_mobile.dart @@ -1,6 +1,9 @@ +import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; import 'package:cardtrading/ui/authentication/get_otp.dart'; import 'package:cardtrading/ui/card_shop/card_shop.dart'; +import 'package:cardtrading/ui/checkout/checkout.dart'; import 'package:cardtrading/ui/featured_seller/featured_seller.dart'; +import 'package:cardtrading/ui/home_screen/home_screen.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_description.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_divider.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; @@ -12,34 +15,22 @@ import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/shop_card.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'helper/home_screen_banner.dart'; -class HomeScreenMobile extends StatefulWidget { +class HomeScreenMobile extends ConsumerStatefulWidget { const HomeScreenMobile({super.key}); @override - State createState() => _HomeScreenMobileState(); + ConsumerState createState() => _HomeScreenMobileState(); } -class _HomeScreenMobileState extends State { +class _HomeScreenMobileState extends ConsumerState { final GlobalKey _globalKey = GlobalKey(); - final appBarActionList = [ - '${AppAssets.svgLocation}search.svg', - '${AppAssets.svgLocation}shopping_cart.svg', - '${AppAssets.svgLocation}notification.svg', - ]; - final bottomNavigationBarSvgPath = [ - '${AppAssets.svgLocation}home.svg', - '${AppAssets.svgLocation}portfolio.svg', - '${AppAssets.svgLocation}store.svg', - '${AppAssets.svgLocation}profile.svg', - ]; - int id = 0; - @override Widget build(BuildContext context) { return Scaffold( @@ -55,11 +46,27 @@ class _HomeScreenMobileState extends State { ), actions: [ ...List.generate( - appBarActionList.length, + 3, (index) { - return Padding( - padding: const EdgeInsets.all(6.0), - child: SvgPicture.asset(appBarActionList[index]), + final homeScreenWatch = ref.watch(homeScreenController); + return InkWell( + onTap: (){ + if(index == 1) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const Checkout(); + }, + ), + ); + } + }, + child: Padding( + padding: const EdgeInsets.all(6.0), + child: + SvgPicture.asset(homeScreenWatch.appBarActionList[index]), + ), ); }, ), @@ -130,89 +137,51 @@ class _HomeScreenMobileState extends State { ], ), ), - bottomNavigationBar: Padding( - padding: const EdgeInsets.only(bottom: 16.0), - child: BottomNavigationBar( - items: [ - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 0 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset('${AppAssets.svgLocation}home.svg'), - ), - label: AppStrings.keyHome, - backgroundColor: AppColors.background), - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 1 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: - SvgPicture.asset('${AppAssets.svgLocation}portfolio.svg'), - ), - label: AppStrings.keyPortfolio, - backgroundColor: AppColors.background), - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 2 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset('${AppAssets.svgLocation}store.svg'), - ), - label: AppStrings.keyStore, - backgroundColor: AppColors.background), - BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: id == 3 ? AppColors.primary : Colors.transparent, - width: 2.0, - ), - ), - ), - child: - SvgPicture.asset('${AppAssets.svgLocation}profile.svg'), + bottomNavigationBar: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final homeScreenWatch = ref.watch(homeScreenController); + return Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: BottomNavigationBar( + items: [ + ...List.generate( + 4, + (index) { + return BottomNavigationBarItem( + icon: Container( + padding: const EdgeInsets.only(top: 8.0), + decoration: BoxDecoration( + border: BorderDirectional( + top: BorderSide( + color: homeScreenWatch.id == index + ? AppColors.primary + : Colors.transparent, + width: 2.0, + ), + ), + ), + child: SvgPicture.asset(homeScreenWatch + .bottomNavigationBarSvgPath[index]), + ), + label: AppStrings.keyHome, + backgroundColor: AppColors.background); + }, ), - label: AppStrings.keyProfile, - backgroundColor: AppColors.background), - ], - selectedFontSize: 10.sp, - unselectedFontSize: 10.sp, - backgroundColor: AppColors.background, - currentIndex: id, - type: BottomNavigationBarType.shifting, - showUnselectedLabels: true, - selectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.primary, fontSize: 12.sp), - selectedItemColor: AppColors.primary, - unselectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.white, fontSize: 12.sp), - onTap: (index) { - setState( - () { - id = index; - if (id == 1 || id == 3) { + ], + selectedFontSize: 10.sp, + unselectedFontSize: 10.sp, + backgroundColor: AppColors.background, + currentIndex: homeScreenWatch.id, + type: BottomNavigationBarType.shifting, + showUnselectedLabels: true, + selectedLabelStyle: TextStyles.regular + .copyWith(color: AppColors.primary, fontSize: 12.sp), + selectedItemColor: AppColors.primary, + unselectedLabelStyle: TextStyles.regular + .copyWith(color: AppColors.white, fontSize: 12.sp), + onTap: (index) { + homeScreenWatch.setId(newId: index); + if (homeScreenWatch.id == 1 || homeScreenWatch.id == 3) { Navigator.push( context, MaterialPageRoute( @@ -222,7 +191,7 @@ class _HomeScreenMobileState extends State { ), ); } - id == 2 + homeScreenWatch.id == 2 ? Navigator.push( context, MaterialPageRoute( @@ -231,11 +200,18 @@ class _HomeScreenMobileState extends State { }, ), ) - : null; + : Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); }, - ); - }, - ), + ), + ); + }, ), ); } diff --git a/lib/ui/onboarding/mobile/onboarding_mobile.dart b/lib/ui/onboarding/mobile/onboarding_mobile.dart index 0c5285a..94ea661 100644 --- a/lib/ui/onboarding/mobile/onboarding_mobile.dart +++ b/lib/ui/onboarding/mobile/onboarding_mobile.dart @@ -1,3 +1,4 @@ +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; import 'package:cardtrading/ui/authentication/sign_in.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; @@ -5,6 +6,7 @@ import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:slider_button/slider_button.dart'; @@ -19,37 +21,21 @@ class OnBoardingMobile extends StatefulWidget { class _OnBoardingMobileState extends State { PageController pageController = PageController(initialPage: 0); - int selectedPage = 0; - - List onBoardingTitle = [ - AppStrings.keyOnBoardingTitle1, - AppStrings.keyOnBoardingTitle2, - AppStrings.keyOnBoardingTitle3 - ]; - List onBoardingContent = [ - AppStrings.keyOnBoardingContent1, - AppStrings.keyOnBoardingContent2, - AppStrings.keyOnBoardingContent3 - ]; - - animateToNextPage() { - pageController.animateToPage( - selectedPage, - duration: const Duration(milliseconds: 250), - curve: Curves.easeIn, - ); - } - @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - body: _bodyWidget(context), + body: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return _bodyWidget(context,onBoardingWatch); + }, + ), ); } ///Body Widget - Widget _bodyWidget(BuildContext context) { + Widget _bodyWidget(BuildContext context,OnBoardingController onBoardingWatch) { return Padding( padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), child: Column( @@ -63,7 +49,7 @@ class _OnBoardingMobileState extends State { ), ///Skip Button - _skipButton(), + _skipButton(onBoardingWatch), ///space left out for animation will implement when I get json file from designer SizedBox( @@ -71,19 +57,20 @@ class _OnBoardingMobileState extends State { child: PageView( onPageChanged: (pageIndex) { setState( - () { - selectedPage = pageIndex; + () { + onBoardingWatch.changePage(pageIndex); }, ); }, controller: pageController, - children: List.generate(onBoardingTitle.length, (index) { + children: List.generate( + onBoardingWatch.onBoardingTitle.length, (index) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded(child: Container(),), Text( - onBoardingTitle[index], + onBoardingWatch.onBoardingTitle[index], maxLines: 2, style: TextStyles.semiBold.copyWith( fontSize: 24.sp, @@ -95,7 +82,7 @@ class _OnBoardingMobileState extends State { height: 15.h, ), Text( - onBoardingContent[index], + onBoardingWatch.onBoardingContent[index], maxLines: 2, style: TextStyles.regular.copyWith( color: AppColors.greyText, @@ -110,46 +97,47 @@ class _OnBoardingMobileState extends State { SizedBox( height: 30.h, ), + ///Page Indicator Boxes - _pageIndicator(), + _pageIndicator(onBoardingWatch), ], ), ), ///Display Common Button on first 2 pages and Slider on 3rd page - selectedPage == 2 ? _sliderButton(context) : _commonButton(), + onBoardingWatch.selectedPage == 2 ? _sliderButton(context,onBoardingWatch) : _commonButton(onBoardingWatch), ], ), ); } - Row _skipButton() { + Row _skipButton(OnBoardingController onBoardingWatch) { return Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - child: selectedPage != 2 - ? Text( - AppStrings.keySkip, - textAlign: TextAlign.start, - style: TextStyles.light.copyWith( - color: AppColors.checkoutTextColor, - ), - ) - : const SizedBox(), - onPressed: () { - setState(() { - selectedPage = onBoardingTitle.length - 1; - animateToNextPage(); - }); - }, - ), - ], - ); + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + child: onBoardingWatch.selectedPage != 2 + ? Text( + AppStrings.keySkip, + textAlign: TextAlign.start, + style: TextStyles.light.copyWith( + color: AppColors.checkoutTextColor, + ), + ) + : const SizedBox(), + onPressed: () { + setState(() { + onBoardingWatch.changePage(onBoardingWatch.onBoardingTitle.length - 1); + onBoardingWatch.animateToNextPage(pageController); + }); + }, + ), + ], + ); } ///Common Button - Widget _commonButton() { + Widget _commonButton(OnBoardingController onBoardingWatch) { return CommonButton( buttonHeight: 50.h, buttonText: AppStrings.keyNext, @@ -159,9 +147,9 @@ class _OnBoardingMobileState extends State { ), onPressed: () { setState( - () { - selectedPage++; - animateToNextPage(); + () { + onBoardingWatch.increment(); + onBoardingWatch.animateToNextPage(pageController); }, ); }, @@ -169,11 +157,12 @@ class _OnBoardingMobileState extends State { } ///Slider Button - Widget _sliderButton(BuildContext context) { + Widget _sliderButton(BuildContext context, OnBoardingController onBoardingWatch) { return SliderButton( backgroundColor: AppColors.background, width: double.infinity, action: () { + onBoardingWatch.changePage(0); Navigator.pushReplacement( context, MaterialPageRoute( @@ -205,22 +194,22 @@ class _OnBoardingMobileState extends State { } ///Page Indicators - Widget _pageIndicator() { + Widget _pageIndicator(OnBoardingController onBoardingWatch) { return Row( children: List.generate( - onBoardingTitle.length, - (index) { + onBoardingWatch.onBoardingTitle.length, + (index) { return Container( margin: EdgeInsets.only(right: 5.w), height: 6.h, - width: selectedPage == index ? 20.w : 6.h, + width: onBoardingWatch.selectedPage == index ? 20.w : 6.h, decoration: BoxDecoration( border: Border.all( - color: selectedPage == index + color: onBoardingWatch.selectedPage == index ? AppColors.primary : Colors.transparent, ), - color: selectedPage == index + color: onBoardingWatch.selectedPage == index ? Colors.transparent : AppColors.indicatorColor, ), diff --git a/lib/ui/splashscreen/mobile/splash_screen_mobile.dart b/lib/ui/splashscreen/mobile/splash_screen_mobile.dart index 112b6a8..d68c820 100644 --- a/lib/ui/splashscreen/mobile/splash_screen_mobile.dart +++ b/lib/ui/splashscreen/mobile/splash_screen_mobile.dart @@ -1,24 +1,23 @@ import 'dart:async'; - import 'package:cardtrading/ui/choose_language/choose_language.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; -class SplashScreenMobile extends StatefulWidget { +class SplashScreenMobile extends ConsumerStatefulWidget { const SplashScreenMobile({super.key}); @override - State createState() => _SplashScreenMobileState(); + ConsumerState createState() => _SplashScreenMobileState(); } -class _SplashScreenMobileState extends State { +class _SplashScreenMobileState extends ConsumerState { @override void initState() { super.initState(); - ///Code to redirect to the onboarding screen Future.delayed( const Duration(seconds: 2), diff --git a/lib/ui/terms_and_condition/mobile/helper/subscription_card.dart b/lib/ui/subscription_plan/mobile/helper/subscription_card.dart similarity index 100% rename from lib/ui/terms_and_condition/mobile/helper/subscription_card.dart rename to lib/ui/subscription_plan/mobile/helper/subscription_card.dart diff --git a/lib/ui/terms_and_condition/mobile/helper/subscription_screen.dart b/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart similarity index 100% rename from lib/ui/terms_and_condition/mobile/helper/subscription_screen.dart rename to lib/ui/subscription_plan/mobile/helper/subscription_screen.dart diff --git a/lib/ui/terms_and_condition/mobile/subscription_mobile.dart b/lib/ui/subscription_plan/mobile/subscription_mobile.dart similarity index 93% rename from lib/ui/terms_and_condition/mobile/subscription_mobile.dart rename to lib/ui/subscription_plan/mobile/subscription_mobile.dart index 48bc81c..ad0504a 100644 --- a/lib/ui/terms_and_condition/mobile/subscription_mobile.dart +++ b/lib/ui/subscription_plan/mobile/subscription_mobile.dart @@ -1,27 +1,26 @@ import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; -import 'package:cardtrading/ui/terms_and_condition/mobile/helper/subscription_card.dart'; -import 'package:cardtrading/ui/terms_and_condition/mobile/helper/subscription_screen.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_title.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class SubscriptionMobile extends StatefulWidget { +class SubscriptionMobile extends ConsumerStatefulWidget { const SubscriptionMobile({super.key}); - @override - State createState() => + ConsumerState createState() => _SubscriptionMobileState(); } -/// NOTE: This Screen is for Subscription Plan Module and not for Terms And Condition Module It was named by mistake I will change it soon -class _SubscriptionMobileState extends State { +class _SubscriptionMobileState extends ConsumerState { final GlobalKey _globalKey = GlobalKey(); @override diff --git a/lib/ui/terms_and_condition/subscription.dart b/lib/ui/subscription_plan/subscription.dart similarity index 84% rename from lib/ui/terms_and_condition/subscription.dart rename to lib/ui/subscription_plan/subscription.dart index be2edce..55b53ef 100644 --- a/lib/ui/terms_and_condition/subscription.dart +++ b/lib/ui/subscription_plan/subscription.dart @@ -1,4 +1,4 @@ -import 'package:cardtrading/ui/terms_and_condition/mobile/subscription_mobile.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/subscription_mobile.dart'; import 'package:flutter/material.dart'; import 'package:responsive_builder/responsive_builder.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 626df78..2b20c20 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,6 +45,7 @@ dependencies: dropdown_button2: ^2.1.4 email_validator: '^2.1.16' flutter_riverpod: + go_router: dev_dependencies: flutter_test: From 37dae55dca42c81c6459b8e163184c30f00e3704 Mon Sep 17 00:00:00 2001 From: uveshmenpur Date: Thu, 13 Jul 2023 13:23:43 +0530 Subject: [PATCH 2/8] Riverpod Integration Complete --- .../card_shop/shop_card_controller.dart | 14 +++++ lib/ui/card_shop/mobile/card_shop_mobile.dart | 1 - .../onboarding/mobile/onboarding_mobile.dart | 57 +++++++++---------- lib/ui/utils/widget/shop_card.dart | 18 +++--- 4 files changed, 50 insertions(+), 40 deletions(-) create mode 100644 lib/framework/controllers/card_shop/shop_card_controller.dart diff --git a/lib/framework/controllers/card_shop/shop_card_controller.dart b/lib/framework/controllers/card_shop/shop_card_controller.dart new file mode 100644 index 0000000..cd91f7c --- /dev/null +++ b/lib/framework/controllers/card_shop/shop_card_controller.dart @@ -0,0 +1,14 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final shopCardController = ChangeNotifierProvider((ref){ + return ShopCardController(); +}); + +class ShopCardController extends ChangeNotifier{ + bool isFavourite = false; + void favourite() { + isFavourite = !isFavourite; + notifyListeners(); + } +} \ No newline at end of file diff --git a/lib/ui/card_shop/mobile/card_shop_mobile.dart b/lib/ui/card_shop/mobile/card_shop_mobile.dart index b87ab6e..9bbcd92 100644 --- a/lib/ui/card_shop/mobile/card_shop_mobile.dart +++ b/lib/ui/card_shop/mobile/card_shop_mobile.dart @@ -26,7 +26,6 @@ class _CardShopMobileState extends ConsumerState { @override Widget build(BuildContext context) { - setState(() {}); return Scaffold( key: _globalKey, appBar: AppBar( diff --git a/lib/ui/onboarding/mobile/onboarding_mobile.dart b/lib/ui/onboarding/mobile/onboarding_mobile.dart index 94ea661..e8a7bc2 100644 --- a/lib/ui/onboarding/mobile/onboarding_mobile.dart +++ b/lib/ui/onboarding/mobile/onboarding_mobile.dart @@ -11,14 +11,14 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:slider_button/slider_button.dart'; -class OnBoardingMobile extends StatefulWidget { +class OnBoardingMobile extends ConsumerStatefulWidget { const OnBoardingMobile({super.key}); @override - State createState() => _OnBoardingMobileState(); + ConsumerState createState() => _OnBoardingMobileState(); } -class _OnBoardingMobileState extends State { +class _OnBoardingMobileState extends ConsumerState { PageController pageController = PageController(initialPage: 0); @override @@ -28,14 +28,15 @@ class _OnBoardingMobileState extends State { body: Consumer( builder: (BuildContext context, WidgetRef ref, Widget? child) { final onBoardingWatch = ref.watch(onBoardingController); - return _bodyWidget(context,onBoardingWatch); + return _bodyWidget(context, onBoardingWatch); }, ), ); } ///Body Widget - Widget _bodyWidget(BuildContext context,OnBoardingController onBoardingWatch) { + Widget _bodyWidget( + BuildContext context, OnBoardingController onBoardingWatch) { return Padding( padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), child: Column( @@ -56,11 +57,7 @@ class _OnBoardingMobileState extends State { height: 0.7.sh, child: PageView( onPageChanged: (pageIndex) { - setState( - () { - onBoardingWatch.changePage(pageIndex); - }, - ); + onBoardingWatch.changePage(pageIndex); }, controller: pageController, children: List.generate( @@ -68,7 +65,9 @@ class _OnBoardingMobileState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded(child: Container(),), + Expanded( + child: Container(), + ), Text( onBoardingWatch.onBoardingTitle[index], maxLines: 2, @@ -105,7 +104,9 @@ class _OnBoardingMobileState extends State { ), ///Display Common Button on first 2 pages and Slider on 3rd page - onBoardingWatch.selectedPage == 2 ? _sliderButton(context,onBoardingWatch) : _commonButton(onBoardingWatch), + onBoardingWatch.selectedPage == 2 + ? _sliderButton(context, onBoardingWatch) + : _commonButton(onBoardingWatch), ], ), ); @@ -118,18 +119,17 @@ class _OnBoardingMobileState extends State { TextButton( child: onBoardingWatch.selectedPage != 2 ? Text( - AppStrings.keySkip, - textAlign: TextAlign.start, - style: TextStyles.light.copyWith( - color: AppColors.checkoutTextColor, - ), - ) + AppStrings.keySkip, + textAlign: TextAlign.start, + style: TextStyles.light.copyWith( + color: AppColors.checkoutTextColor, + ), + ) : const SizedBox(), onPressed: () { - setState(() { - onBoardingWatch.changePage(onBoardingWatch.onBoardingTitle.length - 1); - onBoardingWatch.animateToNextPage(pageController); - }); + onBoardingWatch + .changePage(onBoardingWatch.onBoardingTitle.length - 1); + onBoardingWatch.animateToNextPage(pageController); }, ), ], @@ -146,18 +146,15 @@ class _OnBoardingMobileState extends State { color: AppColors.selectedButtonText, ), onPressed: () { - setState( - () { - onBoardingWatch.increment(); - onBoardingWatch.animateToNextPage(pageController); - }, - ); + onBoardingWatch.increment(); + onBoardingWatch.animateToNextPage(pageController); }, ); } ///Slider Button - Widget _sliderButton(BuildContext context, OnBoardingController onBoardingWatch) { + Widget _sliderButton( + BuildContext context, OnBoardingController onBoardingWatch) { return SliderButton( backgroundColor: AppColors.background, width: double.infinity, @@ -198,7 +195,7 @@ class _OnBoardingMobileState extends State { return Row( children: List.generate( onBoardingWatch.onBoardingTitle.length, - (index) { + (index) { return Container( margin: EdgeInsets.only(right: 5.w), height: 6.h, diff --git a/lib/ui/utils/widget/shop_card.dart b/lib/ui/utils/widget/shop_card.dart index 1f46ac0..53eb5ee 100644 --- a/lib/ui/utils/widget/shop_card.dart +++ b/lib/ui/utils/widget/shop_card.dart @@ -1,24 +1,24 @@ +import 'package:cardtrading/framework/controllers/card_shop/shop_card_controller.dart'; import 'package:cardtrading/ui/card_details/card_details.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -class ShopCard extends StatefulWidget { +class ShopCard extends ConsumerStatefulWidget { const ShopCard({super.key, required this.index, this.onTap}); final int index; final void Function()? onTap; @override - State createState() => _ShopCardState(); + ConsumerState createState() => _ShopCardState(); } -class _ShopCardState extends State { - bool isFavourite = false; - +class _ShopCardState extends ConsumerState { @override Widget build(BuildContext context) { return InkWell( @@ -61,12 +61,12 @@ class _ShopCardState extends State { iconSize: 24, padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), onPressed: () { - setState(() { - isFavourite ? isFavourite = false : isFavourite = true; - }); + ref.watch(shopCardController).favourite(); }, icon: Icon( - isFavourite ? Icons.favorite : Icons.favorite_border, + ref.watch(shopCardController).isFavourite + ? Icons.favorite + : Icons.favorite_border, color: AppColors.primary, ), ), From 6cb96b14245474e07d88d34ae2f110112310527a Mon Sep 17 00:00:00 2001 From: Amaan Date: Thu, 13 Jul 2023 15:20:43 +0530 Subject: [PATCH 3/8] chagnes on boarding --- .../onboarding/onboarding_controller.dart | 11 +- .../authentication/mobile/get_otp_mobile.dart | 2 +- .../authentication/mobile/sign_in_mobile.dart | 63 +++--- .../helper/on_boarding_bottom_button.dart | 21 ++ .../helper/onboarding_center_widget.dart | 66 +++++++ .../mobile/helper/onboarding_next_button.dart | 34 ++++ .../helper/onboarding_page_indicator.dart | 40 ++++ .../mobile/helper/onboarding_skip_button.dart | 40 ++++ .../helper/onboarding_slider_button.dart | 58 ++++++ .../onboarding/mobile/onboarding_mobile.dart | 183 ++---------------- 10 files changed, 312 insertions(+), 206 deletions(-) create mode 100644 lib/ui/onboarding/mobile/helper/on_boarding_bottom_button.dart create mode 100644 lib/ui/onboarding/mobile/helper/onboarding_center_widget.dart create mode 100644 lib/ui/onboarding/mobile/helper/onboarding_next_button.dart create mode 100644 lib/ui/onboarding/mobile/helper/onboarding_page_indicator.dart create mode 100644 lib/ui/onboarding/mobile/helper/onboarding_skip_button.dart create mode 100644 lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart diff --git a/lib/framework/controllers/onboarding/onboarding_controller.dart b/lib/framework/controllers/onboarding/onboarding_controller.dart index 8b9554d..142c061 100644 --- a/lib/framework/controllers/onboarding/onboarding_controller.dart +++ b/lib/framework/controllers/onboarding/onboarding_controller.dart @@ -9,6 +9,8 @@ final onBoardingController = ChangeNotifierProvider( ); class OnBoardingController extends ChangeNotifier { + PageController pageController = PageController(initialPage: 0); + int selectedPage = 0; List onBoardingTitle = [ @@ -21,15 +23,18 @@ class OnBoardingController extends ChangeNotifier { AppStrings.keyOnBoardingContent2, AppStrings.keyOnBoardingContent3 ]; - void changePage(int index){ + + void changePage(int index) { selectedPage = index; notifyListeners(); } - void increment(){ + + void increment() { selectedPage++; notifyListeners(); } - void animateToNextPage(PageController pageController) { + + void animateToNextPage() { pageController.animateToPage( selectedPage, duration: const Duration(milliseconds: 250), diff --git a/lib/ui/authentication/mobile/get_otp_mobile.dart b/lib/ui/authentication/mobile/get_otp_mobile.dart index 58ccf22..5161124 100644 --- a/lib/ui/authentication/mobile/get_otp_mobile.dart +++ b/lib/ui/authentication/mobile/get_otp_mobile.dart @@ -129,7 +129,7 @@ class _GetOtpMobileState extends ConsumerState { final getOtpWatch = ref.watch(getOtpController); return InkWell( onTap: () { - getOtpWatch.changeCount(20); + getOtpWatch.changeCount(60); getOtpWatch.startTimer(); }, child: Visibility( diff --git a/lib/ui/authentication/mobile/sign_in_mobile.dart b/lib/ui/authentication/mobile/sign_in_mobile.dart index ef5daf9..8f9c0d4 100644 --- a/lib/ui/authentication/mobile/sign_in_mobile.dart +++ b/lib/ui/authentication/mobile/sign_in_mobile.dart @@ -17,7 +17,7 @@ class SignInMobile extends ConsumerStatefulWidget { ConsumerState createState() => _SignInMobileState(); } -class _SignInMobileState extends ConsumerState{ +class _SignInMobileState extends ConsumerState { final _formKey = GlobalKey(); @override @@ -25,6 +25,7 @@ class _SignInMobileState extends ConsumerState{ return Scaffold( backgroundColor: AppColors.background, appBar: AppBar( + elevation: 0, backgroundColor: AppColors.background, leading: IconButton( onPressed: () { @@ -55,40 +56,42 @@ class _SignInMobileState extends ConsumerState{ Expanded( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: 0.6.sw, - child: Text( - AppStrings.keySignInTitle, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: 0.6.sw, + child: Text( + AppStrings.keySignInTitle, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + ), ), ), - ), - SizedBox( - height: 10.h, - ), - SizedBox( - width: 0.9.sw, - child: Text( - AppStrings.keySignInContent, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, + SizedBox( + height: 10.h, + ), + SizedBox( + width: 0.9.sw, + child: Text( + AppStrings.keySignInContent, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), ), ), - ), - SizedBox( - height: 30.h, - ), + SizedBox( + height: 30.h, + ), - ///Enter Phone Number Text Fields - const SignInTextField(), - ], + ///Enter Phone Number Text Fields + const SignInTextField(), + ], + ), ), ), ), diff --git a/lib/ui/onboarding/mobile/helper/on_boarding_bottom_button.dart b/lib/ui/onboarding/mobile/helper/on_boarding_bottom_button.dart new file mode 100644 index 0000000..60c75ef --- /dev/null +++ b/lib/ui/onboarding/mobile/helper/on_boarding_bottom_button.dart @@ -0,0 +1,21 @@ +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; +import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_next_button.dart'; +import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_slider_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class OnBoardingBottomButton extends StatelessWidget { + const OnBoardingBottomButton({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return onBoardingWatch.selectedPage == 2 + ? const OnBoardingSliderButton() + : const OnBoardingNextButton(); + }, + ); + } +} diff --git a/lib/ui/onboarding/mobile/helper/onboarding_center_widget.dart b/lib/ui/onboarding/mobile/helper/onboarding_center_widget.dart new file mode 100644 index 0000000..19a0cd2 --- /dev/null +++ b/lib/ui/onboarding/mobile/helper/onboarding_center_widget.dart @@ -0,0 +1,66 @@ +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class OnBoardingCenterWidget extends StatelessWidget { + const OnBoardingCenterWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return Column( + children: [ + SizedBox( + height: 0.7.sh, + child: PageView( + onPageChanged: (pageIndex) { + onBoardingWatch.changePage(pageIndex); + }, + controller: onBoardingWatch.pageController, + children: List.generate(onBoardingWatch.onBoardingTitle.length, + (index) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Container(), + ), + Text( + onBoardingWatch.onBoardingTitle[index], + maxLines: 2, + style: TextStyles.semiBold.copyWith( + fontSize: 24.sp, + color: AppColors.golden, + ), + softWrap: true, + ), + SizedBox( + height: 15.h, + ), + Text( + onBoardingWatch.onBoardingContent[index], + maxLines: 2, + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + ), + softWrap: true, + ), + ], + ); + }), + ), + ), + SizedBox( + height: 30.h, + ), + ], + ); + }, + ); + } +} diff --git a/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart b/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart new file mode 100644 index 0000000..4d5171d --- /dev/null +++ b/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart @@ -0,0 +1,34 @@ +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +import '../../../../framework/controllers/onboarding/onboarding_controller.dart'; + +class OnBoardingNextButton extends StatelessWidget { + const OnBoardingNextButton({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return CommonButton( + buttonHeight: 50.h, + buttonText: AppStrings.keyNext, + buttonTextStyle: TextStyles.semiBold.copyWith( + fontSize: 16.sp, + color: AppColors.selectedButtonText, + ), + onPressed: () { + onBoardingWatch.increment(); + onBoardingWatch.animateToNextPage(); + }, + ); + }, + ); + } +} diff --git a/lib/ui/onboarding/mobile/helper/onboarding_page_indicator.dart b/lib/ui/onboarding/mobile/helper/onboarding_page_indicator.dart new file mode 100644 index 0000000..c1875cb --- /dev/null +++ b/lib/ui/onboarding/mobile/helper/onboarding_page_indicator.dart @@ -0,0 +1,40 @@ +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class OnBoardingPageIndicator extends StatelessWidget { + const OnBoardingPageIndicator({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return Row( + children: List.generate( + onBoardingWatch.onBoardingTitle.length, + (index) { + return Container( + margin: EdgeInsets.only(right: 5.w), + height: 6.h, + width: onBoardingWatch.selectedPage == index ? 20.w : 6.h, + decoration: BoxDecoration( + border: Border.all( + color: onBoardingWatch.selectedPage == index + ? AppColors.primary + : Colors.transparent, + ), + color: onBoardingWatch.selectedPage == index + ? Colors.transparent + : AppColors.indicatorColor, + ), + ); + }, + ), + ); + }, + ); + } +} diff --git a/lib/ui/onboarding/mobile/helper/onboarding_skip_button.dart b/lib/ui/onboarding/mobile/helper/onboarding_skip_button.dart new file mode 100644 index 0000000..97790a8 --- /dev/null +++ b/lib/ui/onboarding/mobile/helper/onboarding_skip_button.dart @@ -0,0 +1,40 @@ +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class SkipButton extends StatelessWidget { + const SkipButton({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + child: onBoardingWatch.selectedPage != 2 + ? Text( + AppStrings.keySkip, + textAlign: TextAlign.start, + style: TextStyles.light.copyWith( + color: AppColors.checkoutTextColor, + ), + ) + : const SizedBox(), + onPressed: () { + onBoardingWatch + .changePage(onBoardingWatch.onBoardingTitle.length - 1); + onBoardingWatch.animateToNextPage(); + }, + ), + ], + ); + }, + ); + } +} diff --git a/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart b/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart new file mode 100644 index 0000000..9c6d552 --- /dev/null +++ b/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart @@ -0,0 +1,58 @@ +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; +import 'package:cardtrading/ui/authentication/sign_in.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:slider_button/slider_button.dart'; + +import '../../../utils/theme/assets.dart'; + +class OnBoardingSliderButton extends StatelessWidget { + const OnBoardingSliderButton({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final onBoardingWatch = ref.watch(onBoardingController); + return SliderButton( + backgroundColor: AppColors.background, + width: double.infinity, + action: () { + onBoardingWatch.changePage(0); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) { + return const SignIn(); + }, + ), + ); + }, + alignLabel: Alignment.center, + highlightedColor: AppColors.primary, + baseColor: AppColors.primary, + label: Text( + AppStrings.keySwipeToGetStarted, + textAlign: TextAlign.center, + style: TextStyles.semiBold.copyWith( + color: AppColors.primary, + fontSize: 16.sp, + ), + ), + child: Container( + color: Colors.transparent, + child: SvgPicture.asset( + '${AppAssets.svgLocation}swipeicon.svg', + matchTextDirection: true, + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/onboarding/mobile/onboarding_mobile.dart b/lib/ui/onboarding/mobile/onboarding_mobile.dart index e8a7bc2..4ae4e6b 100644 --- a/lib/ui/onboarding/mobile/onboarding_mobile.dart +++ b/lib/ui/onboarding/mobile/onboarding_mobile.dart @@ -1,42 +1,29 @@ -import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; -import 'package:cardtrading/ui/authentication/sign_in.dart'; -import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/onboarding/mobile/helper/on_boarding_bottom_button.dart'; +import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_center_widget.dart'; +import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_page_indicator.dart'; +import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_skip_button.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; -import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:slider_button/slider_button.dart'; -class OnBoardingMobile extends ConsumerStatefulWidget { +class OnBoardingMobile extends StatelessWidget { const OnBoardingMobile({super.key}); - @override - ConsumerState createState() => _OnBoardingMobileState(); -} - -class _OnBoardingMobileState extends ConsumerState { - PageController pageController = PageController(initialPage: 0); - @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, body: Consumer( builder: (BuildContext context, WidgetRef ref, Widget? child) { - final onBoardingWatch = ref.watch(onBoardingController); - return _bodyWidget(context, onBoardingWatch); + return _bodyWidget(context); }, ), ); } ///Body Widget - Widget _bodyWidget( - BuildContext context, OnBoardingController onBoardingWatch) { + Widget _bodyWidget(BuildContext context) { return Padding( padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), child: Column( @@ -50,169 +37,21 @@ class _OnBoardingMobileState extends ConsumerState { ), ///Skip Button - _skipButton(onBoardingWatch), + const SkipButton(), ///space left out for animation will implement when I get json file from designer - SizedBox( - height: 0.7.sh, - child: PageView( - onPageChanged: (pageIndex) { - onBoardingWatch.changePage(pageIndex); - }, - controller: pageController, - children: List.generate( - onBoardingWatch.onBoardingTitle.length, (index) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Container(), - ), - Text( - onBoardingWatch.onBoardingTitle[index], - maxLines: 2, - style: TextStyles.semiBold.copyWith( - fontSize: 24.sp, - color: AppColors.golden, - ), - softWrap: true, - ), - SizedBox( - height: 15.h, - ), - Text( - onBoardingWatch.onBoardingContent[index], - maxLines: 2, - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - ), - softWrap: true, - ), - ], - ); - }), - ), - ), - SizedBox( - height: 30.h, - ), + const OnBoardingCenterWidget(), ///Page Indicator Boxes - _pageIndicator(onBoardingWatch), + const OnBoardingPageIndicator(), ], ), ), ///Display Common Button on first 2 pages and Slider on 3rd page - onBoardingWatch.selectedPage == 2 - ? _sliderButton(context, onBoardingWatch) - : _commonButton(onBoardingWatch), + const OnBoardingBottomButton(), ], ), ); } - - Row _skipButton(OnBoardingController onBoardingWatch) { - return Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - child: onBoardingWatch.selectedPage != 2 - ? Text( - AppStrings.keySkip, - textAlign: TextAlign.start, - style: TextStyles.light.copyWith( - color: AppColors.checkoutTextColor, - ), - ) - : const SizedBox(), - onPressed: () { - onBoardingWatch - .changePage(onBoardingWatch.onBoardingTitle.length - 1); - onBoardingWatch.animateToNextPage(pageController); - }, - ), - ], - ); - } - - ///Common Button - Widget _commonButton(OnBoardingController onBoardingWatch) { - return CommonButton( - buttonHeight: 50.h, - buttonText: AppStrings.keyNext, - buttonTextStyle: TextStyles.semiBold.copyWith( - fontSize: 16.sp, - color: AppColors.selectedButtonText, - ), - onPressed: () { - onBoardingWatch.increment(); - onBoardingWatch.animateToNextPage(pageController); - }, - ); - } - - ///Slider Button - Widget _sliderButton( - BuildContext context, OnBoardingController onBoardingWatch) { - return SliderButton( - backgroundColor: AppColors.background, - width: double.infinity, - action: () { - onBoardingWatch.changePage(0); - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (BuildContext context) { - return const SignIn(); - }, - ), - ); - }, - alignLabel: Alignment.center, - highlightedColor: AppColors.primary, - baseColor: AppColors.primary, - label: Text( - AppStrings.keySwipeToGetStarted, - textAlign: TextAlign.center, - style: TextStyles.semiBold.copyWith( - color: AppColors.primary, - fontSize: 16.sp, - ), - ), - child: Container( - color: Colors.transparent, - child: SvgPicture.asset( - '${AppAssets.svgLocation}swipeicon.svg', - matchTextDirection: true, - ), - ), - ); - } - - ///Page Indicators - Widget _pageIndicator(OnBoardingController onBoardingWatch) { - return Row( - children: List.generate( - onBoardingWatch.onBoardingTitle.length, - (index) { - return Container( - margin: EdgeInsets.only(right: 5.w), - height: 6.h, - width: onBoardingWatch.selectedPage == index ? 20.w : 6.h, - decoration: BoxDecoration( - border: Border.all( - color: onBoardingWatch.selectedPage == index - ? AppColors.primary - : Colors.transparent, - ), - color: onBoardingWatch.selectedPage == index - ? Colors.transparent - : AppColors.indicatorColor, - ), - ); - }, - ), - ); - } } From 9e1d8570e1dd703d6ac9536add7bdfefe5e94c21 Mon Sep 17 00:00:00 2001 From: uveshmenpur Date: Tue, 18 Jul 2023 19:28:26 +0530 Subject: [PATCH 4/8] Bug Fixing --- .../add_address_controller.dart | 31 -- .../complete_profie_controller.dart | 13 - .../complete_profile_controller.dart | 85 ++++ .../mobile/helper/add_other_card_button.dart | 0 .../checkout/mobile/helper/checkout_body.dart | 0 .../mobile/helper/checkout_button.dart | 0 .../mobile/helper/choose_language_button.dart | 0 .../helper/choose_language_next_button.dart | 0 lib/ui/complete_your_profile/add_address.dart | 17 - .../mobile/add_address_mobile.dart | 420 ------------------ .../mobile/helper/add_address_screen.dart | 0 .../helper/complete_profile_screen.dart | 0 .../mobile/helper/featured_seller_body.dart | 0 .../helper/home_screen_app_bar_actions.dart | 0 .../home_screen_bottom_navigation_bar.dart | 0 .../mobile/helper/home_screen_card_grid.dart | 0 .../mobile/helper/splash_body.dart | 0 .../mobile/helper/subscription_plan_body.dart | 0 lib/ui/utils/widget/common_appbar.dart | 0 19 files changed, 85 insertions(+), 481 deletions(-) delete mode 100644 lib/framework/controllers/complete_your_profile/add_address_controller.dart delete mode 100644 lib/framework/controllers/complete_your_profile/complete_profie_controller.dart create mode 100644 lib/framework/controllers/complete_your_profile/complete_profile_controller.dart create mode 100644 lib/ui/checkout/mobile/helper/add_other_card_button.dart create mode 100644 lib/ui/checkout/mobile/helper/checkout_body.dart create mode 100644 lib/ui/checkout/mobile/helper/checkout_button.dart create mode 100644 lib/ui/choose_language/mobile/helper/choose_language_button.dart create mode 100644 lib/ui/choose_language/mobile/helper/choose_language_next_button.dart delete mode 100644 lib/ui/complete_your_profile/add_address.dart delete mode 100644 lib/ui/complete_your_profile/mobile/add_address_mobile.dart create mode 100644 lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart create mode 100644 lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart create mode 100644 lib/ui/featured_seller/mobile/helper/featured_seller_body.dart create mode 100644 lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart create mode 100644 lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart create mode 100644 lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart create mode 100644 lib/ui/splashscreen/mobile/helper/splash_body.dart create mode 100644 lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart create mode 100644 lib/ui/utils/widget/common_appbar.dart diff --git a/lib/framework/controllers/complete_your_profile/add_address_controller.dart b/lib/framework/controllers/complete_your_profile/add_address_controller.dart deleted file mode 100644 index 0cc0644..0000000 --- a/lib/framework/controllers/complete_your_profile/add_address_controller.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -final addAddressController = -ChangeNotifierProvider((ref) => AddAddressController()); - -class AddAddressController extends ChangeNotifier { - String? area, block, street; - int id = 0; - List areas = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List blocks = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List streets = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List addressTypes = [AppStrings.keyAddressTypeOne, AppStrings.keyAddressTypeTwo, AppStrings.keyAddressTypeThree]; - void setArea(String? value){ - area = value; - notifyListeners(); - } - void setBlock(String? value){ - area = value; - notifyListeners(); - } - void setStreet(String? value){ - area = value; - notifyListeners(); - } - void setId(int newId){ - id = newId; - notifyListeners(); - } -} diff --git a/lib/framework/controllers/complete_your_profile/complete_profie_controller.dart b/lib/framework/controllers/complete_your_profile/complete_profie_controller.dart deleted file mode 100644 index 468ccbb..0000000 --- a/lib/framework/controllers/complete_your_profile/complete_profie_controller.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -final completeProfileController = - ChangeNotifierProvider((ref) => CompleteProfileController()); - -class CompleteProfileController extends ChangeNotifier { - bool hasReferral = false; - void addReferral(){ - hasReferral = !hasReferral; - notifyListeners(); - } -} diff --git a/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart b/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart new file mode 100644 index 0000000..c62d5b9 --- /dev/null +++ b/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart @@ -0,0 +1,85 @@ +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:email_validator/email_validator.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final completeProfileController = + ChangeNotifierProvider((ref) => CompleteProfileController()); + +class CompleteProfileController extends ChangeNotifier { + bool hasReferral = false; + int page = 0; + final _firstPageFormKey = GlobalKey(); + final _secondPageFormKey = GlobalKey(); + final PageController pageController = PageController(); + + get firstPageFormKey => _firstPageFormKey; + + get secondPageFormKey => _secondPageFormKey; + + void addReferral() { + hasReferral = true; + notifyListeners(); + } + + void hideReferral() { + hasReferral = false; + notifyListeners(); + } + + String? area, block, street; + int id = 0; + List areas = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List blocks = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List streets = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List addressTypes = [ + AppStrings.keyAddressTypeOne, + AppStrings.keyAddressTypeTwo, + AppStrings.keyAddressTypeThree + ]; + + void setArea(String? value) { + area = value; + notifyListeners(); + } + + void setBlock(String? value) { + area = value; + notifyListeners(); + } + + void setStreet(String? value) { + area = value; + notifyListeners(); + } + + String? validateEmail(String? value){ + if (!EmailValidator.validate(value!)) { + return 'Enter Valid Email'; + } + return null; + } + + void setId(int newId) { + id = newId; + notifyListeners(); + } + + void changePage(int index){ + page = index; + notifyListeners(); + } + void nextPage() { + pageController.nextPage( + duration: const Duration(milliseconds: 500), + curve: Curves.easeIn, + ); + page++; + notifyListeners(); + } + + void resetPage(){ + pageController.jumpToPage(0); + notifyListeners(); + } +} diff --git a/lib/ui/checkout/mobile/helper/add_other_card_button.dart b/lib/ui/checkout/mobile/helper/add_other_card_button.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/checkout/mobile/helper/checkout_body.dart b/lib/ui/checkout/mobile/helper/checkout_body.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/checkout/mobile/helper/checkout_button.dart b/lib/ui/checkout/mobile/helper/checkout_button.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/choose_language/mobile/helper/choose_language_button.dart b/lib/ui/choose_language/mobile/helper/choose_language_button.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/choose_language/mobile/helper/choose_language_next_button.dart b/lib/ui/choose_language/mobile/helper/choose_language_next_button.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/complete_your_profile/add_address.dart b/lib/ui/complete_your_profile/add_address.dart deleted file mode 100644 index 228d9f6..0000000 --- a/lib/ui/complete_your_profile/add_address.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:cardtrading/ui/complete_your_profile/mobile/add_address_mobile.dart'; -import 'package:flutter/material.dart'; -import 'package:responsive_builder/responsive_builder.dart'; - -class AddAddress extends StatelessWidget { - const AddAddress({super.key}); - - @override - Widget build(BuildContext context) { - return ResponsiveBuilder(builder: (context,sizingInformation){ - if(sizingInformation.isMobile){ - return const AddAddressMobile(); - } - return const AddAddressMobile(); - }); - } -} diff --git a/lib/ui/complete_your_profile/mobile/add_address_mobile.dart b/lib/ui/complete_your_profile/mobile/add_address_mobile.dart deleted file mode 100644 index 84b5eea..0000000 --- a/lib/ui/complete_your_profile/mobile/add_address_mobile.dart +++ /dev/null @@ -1,420 +0,0 @@ -import 'package:cardtrading/framework/controllers/complete_your_profile/add_address_controller.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; -import 'package:cardtrading/ui/utils/theme/assets.dart'; -import 'package:cardtrading/ui/utils/theme/colors.dart'; -import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; -import 'package:dropdown_button2/dropdown_button2.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class AddAddressMobile extends ConsumerStatefulWidget { - const AddAddressMobile({super.key}); - - @override - ConsumerState createState() => _AddAddressMobileState(); -} - -class _AddAddressMobileState extends ConsumerState { - final _formKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: AppColors.background, - appBar: AppBar( - backgroundColor: AppColors.background, - elevation: 0, - centerTitle: true, - title: Text( - AppStrings.keyCompleteYourProfile, - style: TextStyles.medium.copyWith( - fontSize: 16.sp, - ), - ), - leading: Padding( - padding: const EdgeInsets.all(12.0), - child: InkWell( - onTap: () { - Navigator.pop(context); - }, - child: SvgPicture.asset( - '${AppAssets.svgLocation}arrow_right_line.svg', - width: 16.w, - height: 16.h, - ), - ), - ), - ), - body: Form( - key: _formKey, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - final addAddressWatch = ref.watch(addAddressController); - return Column( - children: [ - Expanded( - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 3, - child: SizedBox( - width: 180, - child: Text( - AppStrings.keyEnterYourAddress, - softWrap: true, - maxLines: 3, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, - height: 1.5, - ), - ), - ), - ), - const Spacer(), - ...List.generate( - 2, - (index) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: Container( - width: 8.w, - height: 8.h, - decoration: const BoxDecoration( - color: AppColors.primary), - ), - ); - }, - ), - ], - ), - SizedBox( - height: 15.h, - ), - Text( - AppStrings.keyEnterYourAddressContent, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - height: 1.5, - ), - ), - SizedBox( - height: 25.h, - ), - DropdownButtonFormField2( - isExpanded: true, - decoration: const InputDecoration( - border: InputBorder.none, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: EdgeInsets.all(16.0), - ), - onMenuStateChange: (isChanged) { - _formKey.currentState!.validate(); - }, - validator: (value) { - if (!addAddressWatch.areas.contains(value)) { - return 'This Field is mandatory'; - } - return null; - }, - items: addAddressWatch.areas - .map( - (String item) => DropdownMenuItem( - value: item, - child: Text( - item, - style: TextStyles.light.copyWith( - color: AppColors.buttonText, - ), - ), - ), - ) - .toList(), - value: addAddressWatch.area, - hint: Text( - 'Area*', - style: TextStyles.light - .copyWith(color: AppColors.buttonText), - ), - onChanged: (value) { - addAddressWatch.setArea(value); - }, - ), - SizedBox( - height: 20.h, - ), - DropdownButtonFormField2( - isExpanded: true, - decoration: const InputDecoration( - border: InputBorder.none, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: EdgeInsets.all(16.0), - ), - onMenuStateChange: (isChanged) { - _formKey.currentState!.validate(); - }, - validator: (value) { - if (!addAddressWatch.blocks.contains(value)) { - return 'This Field is mandatory'; - } - return null; - }, - items: addAddressWatch.blocks - .map( - (String item) => DropdownMenuItem( - value: item, - child: Text( - item, - style: TextStyles.light.copyWith( - color: AppColors.buttonText, - ), - ), - ), - ) - .toList(), - value: addAddressWatch.block, - hint: Text( - 'Block*', - style: TextStyles.light - .copyWith(color: AppColors.buttonText), - ), - onChanged: (value) { - addAddressWatch.setBlock(value); - }, - ), - SizedBox( - height: 20.h, - ), - DropdownButtonFormField2( - isExpanded: true, - decoration: const InputDecoration( - border: InputBorder.none, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: EdgeInsets.all(16.0), - ), - onMenuStateChange: (isChanged) { - _formKey.currentState!.validate(); - }, - validator: (value) { - if (!addAddressWatch.streets.contains(value)) { - return 'This Field is mandatory'; - } - return null; - }, - items: addAddressWatch.streets - .map( - (String item) => DropdownMenuItem( - value: item, - child: Text( - item, - style: TextStyles.light.copyWith( - color: AppColors.buttonText, - ), - ), - ), - ) - .toList(), - value: addAddressWatch.street, - hint: Text( - 'Street*', - style: TextStyles.light - .copyWith(color: AppColors.buttonText), - ), - onChanged: (value) { - addAddressWatch.setStreet(value); - }, - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyAvenue, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyBuilding, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyFloor, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - TextFormField( - cursorColor: AppColors.primary, - validator: (value) { - if (value!.length > 1) { - return null; - } - return 'This field is mandatory.'; - }, - onChanged: (value) { - _formKey.currentState!.validate(); - }, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyHouseNo, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - Text( - AppStrings.keyAddressType, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - height: 1.5, - ), - ), - SizedBox( - height: 10.h, - ), - Row( - children: [ - ...List.generate( - 3, - (index) { - return Row( - children: [ - InkWell( - child: Container( - decoration: BoxDecoration( - color: addAddressWatch.id == index - ? AppColors.primary - : AppColors.buttonBg, - ), - padding: EdgeInsets.symmetric( - horizontal: 16.0.w, - vertical: 8.0.h), - child: Text( - addAddressWatch.addressTypes[index], - style: TextStyles.regular.copyWith( - color: addAddressWatch.id == index - ? AppColors.selectedButtonText - : AppColors.greyText, - fontSize: 12.sp, - ), - ), - ), - onTap: () { - addAddressWatch.setId(index); - }, - ), - SizedBox( - width: 10.0.w, - ), - ], - ); - }, - ), - ], - ) - ], - ), - ), - ), - Padding( - padding: EdgeInsets.symmetric(vertical: 24.h), - child: CommonButton( - buttonPadding: const EdgeInsets.all(8.0), - prefixWidget: Text( - AppStrings.keySignUp, - style: TextStyles.semiBold.copyWith( - color: AppColors.selectedButtonText, - fontSize: 16.sp, - ), - ), - buttonText: ' ', - suffixWidget: const Icon( - Icons.arrow_forward_outlined, - color: AppColors.selectedButtonText, - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - _formKey.currentState!.save(); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); - } - }, - ), - ), - ], - ); - }, - ), - ), - ), - ); - } -} diff --git a/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart b/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart b/lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart b/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart b/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart b/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart b/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/splashscreen/mobile/helper/splash_body.dart b/lib/ui/splashscreen/mobile/helper/splash_body.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart b/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/ui/utils/widget/common_appbar.dart b/lib/ui/utils/widget/common_appbar.dart new file mode 100644 index 0000000..e69de29 From 51d22ab9e982011aafb0dd9f374e10c6a30c989a Mon Sep 17 00:00:00 2001 From: uveshmenpur Date: Tue, 18 Jul 2023 19:28:35 +0530 Subject: [PATCH 5/8] Bug Fixing --- .../authentication/get_otp_controller.dart | 5 +- .../complete_profile_controller.dart | 8 +- .../home_screen/home_screen_controller.dart | 7 + .../mobile/helper/about_us_screen.dart | 34 +- .../authentication/mobile/get_otp_mobile.dart | 5 +- .../mobile/helper/sign_in_text_field.dart | 21 +- .../authentication/mobile/sign_in_mobile.dart | 96 ++--- lib/ui/checkout/mobile/checkout_mobile.dart | 249 +---------- .../mobile/helper/add_other_card_button.dart | 38 ++ .../checkout/mobile/helper/checkout_body.dart | 206 +++++++++ .../mobile/helper/checkout_button.dart | 37 ++ .../mobile/choose_language_mobile.dart | 143 ++----- .../mobile/helper/choose_language_button.dart | 56 +++ .../helper/choose_language_next_button.dart | 34 ++ .../mobile/complete_profile_mobile.dart | 265 ++---------- .../mobile/helper/add_address_screen.dart | 390 ++++++++++++++++++ .../helper/complete_profile_screen.dart | 208 ++++++++++ .../mobile/featured_seller_mobile.dart | 59 +-- .../mobile/helper/featured_seller_body.dart | 56 +++ .../helper/home_screen_app_bar_actions.dart | 48 +++ .../mobile/helper/home_screen_banner.dart | 44 +- .../home_screen_bottom_navigation_bar.dart | 96 +++++ .../mobile/helper/home_screen_card_grid.dart | 33 ++ .../helper/home_screen_description.dart | 15 +- .../mobile/helper/home_screen_divider.dart | 7 +- .../mobile/helper/home_screen_drawer.dart | 53 +-- .../helper/home_screen_drawer_body.dart | 15 +- .../home_screen_featured_collection_list.dart | 46 ++- .../mobile/helper/home_screen_profiles.dart | 75 ++-- .../mobile/home_screen_mobile.dart | 162 +------- .../mobile/helper/onboarding_next_button.dart | 3 +- .../onboarding/mobile/onboarding_mobile.dart | 60 ++- .../mobile/helper/splash_body.dart | 34 ++ .../mobile/splash_screen_mobile.dart | 31 +- .../mobile/helper/subscription_card.dart | 10 +- .../mobile/helper/subscription_plan_body.dart | 139 +++++++ .../mobile/helper/subscription_screen.dart | 30 +- .../mobile/subscription_mobile.dart | 154 +------ lib/ui/utils/theme/my_strings.dart | 1 + lib/ui/utils/widget/common_appbar.dart | 51 +++ lib/ui/utils/widget/common_button.dart | 1 + lib/ui/utils/widget/common_paragraph.dart | 3 +- lib/ui/utils/widget/common_title.dart | 1 + lib/ui/utils/widget/shop_card.dart | 52 +-- 44 files changed, 1875 insertions(+), 1206 deletions(-) diff --git a/lib/framework/controllers/authentication/get_otp_controller.dart b/lib/framework/controllers/authentication/get_otp_controller.dart index 67569df..05d02d6 100644 --- a/lib/framework/controllers/authentication/get_otp_controller.dart +++ b/lib/framework/controllers/authentication/get_otp_controller.dart @@ -8,7 +8,7 @@ final getOtpController = ChangeNotifierProvider( }, ); -class GetOtpController extends ChangeNotifier { +class GetOtpController extends ChangeNotifier{ int countDown = 59; late Timer timer; @@ -16,6 +16,9 @@ class GetOtpController extends ChangeNotifier { countDown = count; notifyListeners(); } + + + void decrement(){ countDown--; notifyListeners(); diff --git a/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart b/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart index c62d5b9..7e44d5d 100644 --- a/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart +++ b/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart @@ -14,7 +14,6 @@ class CompleteProfileController extends ChangeNotifier { final PageController pageController = PageController(); get firstPageFormKey => _firstPageFormKey; - get secondPageFormKey => _secondPageFormKey; void addReferral() { @@ -38,6 +37,7 @@ class CompleteProfileController extends ChangeNotifier { AppStrings.keyAddressTypeThree ]; + void setArea(String? value) { area = value; notifyListeners(); @@ -77,6 +77,12 @@ class CompleteProfileController extends ChangeNotifier { page++; notifyListeners(); } + String? validateDropDowns(String? value,int index){ + if((areas.contains(value) && index == 0) || (blocks.contains(value) && index == 1) || (streets.contains(value) && index == 3)){ + return 'Enter Valid Value'; + } + return null; + } void resetPage(){ pageController.jumpToPage(0); diff --git a/lib/framework/controllers/home_screen/home_screen_controller.dart b/lib/framework/controllers/home_screen/home_screen_controller.dart index e438e85..e60fafc 100644 --- a/lib/framework/controllers/home_screen/home_screen_controller.dart +++ b/lib/framework/controllers/home_screen/home_screen_controller.dart @@ -1,4 +1,5 @@ import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -20,6 +21,12 @@ class HomeScreenController extends ChangeNotifier { '${AppAssets.svgLocation}store.svg', '${AppAssets.svgLocation}profile.svg', ]; + final bottomNavigationBarLabels = [ + AppStrings.keyHome, + AppStrings.keyPortfolio, + AppStrings.keyStore, + AppStrings.keyProfile, + ]; String url = '${AppAssets.svgLocation}dark_mode.svg'; int id = 0; diff --git a/lib/ui/about_us/mobile/helper/about_us_screen.dart b/lib/ui/about_us/mobile/helper/about_us_screen.dart index e6beec0..b52dd14 100644 --- a/lib/ui/about_us/mobile/helper/about_us_screen.dart +++ b/lib/ui/about_us/mobile/helper/about_us_screen.dart @@ -42,23 +42,25 @@ class AboutUsScreen extends StatelessWidget { ), centerTitle: true, ), - body: const Column( - children: [ - SizedBox( - height: 10.0, - ), - ///Common Paragraph - CommonParagraph(), - Padding( - padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 8.0), - child: Divider( - thickness: 1.0, - color: AppColors.indicatorColor, + body: SingleChildScrollView( + child: Column( + children: [ + SizedBox( + height: 10.0.h, ), - ), - ///Common Paragraph - CommonParagraph(), - ], + ///Common Paragraph + const CommonParagraph(), + Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0.w, vertical: 8.0.h), + child: const Divider( + thickness: 1.0, + color: AppColors.indicatorColor, + ), + ), + ///Common Paragraph + const CommonParagraph(), + ], + ), ), ); } diff --git a/lib/ui/authentication/mobile/get_otp_mobile.dart b/lib/ui/authentication/mobile/get_otp_mobile.dart index 5161124..765aa9a 100644 --- a/lib/ui/authentication/mobile/get_otp_mobile.dart +++ b/lib/ui/authentication/mobile/get_otp_mobile.dart @@ -21,7 +21,7 @@ class GetOtpMobile extends ConsumerStatefulWidget { ConsumerState createState() => _GetOtpMobileState(); } -class _GetOtpMobileState extends ConsumerState { +class _GetOtpMobileState extends ConsumerState{ final _formKey = GlobalKey(); @override @@ -35,6 +35,7 @@ class _GetOtpMobileState extends ConsumerState { @override Widget build(BuildContext context) { + return Scaffold( backgroundColor: AppColors.background, appBar: AppBar( @@ -184,7 +185,6 @@ class _GetOtpMobileState extends ConsumerState { return PinCodeTextField( validator: (value) { try { - double num = double.parse(value?? ''); if (value?.length != 6) { return 'Enter Valid OTP'; } else { @@ -265,3 +265,4 @@ class _GetOtpMobileState extends ConsumerState { ); } } + diff --git a/lib/ui/authentication/mobile/helper/sign_in_text_field.dart b/lib/ui/authentication/mobile/helper/sign_in_text_field.dart index 0febe61..7e61451 100644 --- a/lib/ui/authentication/mobile/helper/sign_in_text_field.dart +++ b/lib/ui/authentication/mobile/helper/sign_in_text_field.dart @@ -12,26 +12,19 @@ class SignInTextField extends StatelessWidget { @override Widget build(BuildContext context) { + final FocusNode signInFocusNode = FocusNode(); return Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( + focusNode: signInFocusNode, onTapOutside: (pointer) { - FocusManager.instance.primaryFocus?.unfocus(); + signInFocusNode.unfocus(); }, validator: (value) { - try { - double num = double.parse(value ?? ''); - if (value?.length != 10) { - return 'Enter Valid Phone Number'; - } else { - return null; - } - } catch (e) { - if (value?.length != 10) { - return 'Invalid Input'; - } else { - return 'Invalid Input'; - } + if (value?.length != 10) { + return 'Enter Valid Phone Number'; + } else { + return null; } }, keyboardType: TextInputType.phone, diff --git a/lib/ui/authentication/mobile/sign_in_mobile.dart b/lib/ui/authentication/mobile/sign_in_mobile.dart index 8f9c0d4..7862d68 100644 --- a/lib/ui/authentication/mobile/sign_in_mobile.dart +++ b/lib/ui/authentication/mobile/sign_in_mobile.dart @@ -43,68 +43,62 @@ class _SignInMobileState extends ConsumerState { ), centerTitle: true, ), - body: _bodyWidget(context), - ); - } - - ///Body Widget - Widget _bodyWidget(BuildContext context) { - return Form( - key: _formKey, - child: Column( - children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: 0.6.sw, - child: Text( - AppStrings.keySignInTitle, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, + body: Form( + key: _formKey, + child: Column( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: 0.6.sw, + child: Text( + AppStrings.keySignInTitle, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + ), ), ), - ), - SizedBox( - height: 10.h, - ), - SizedBox( - width: 0.9.sw, - child: Text( - AppStrings.keySignInContent, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, + SizedBox( + height: 10.h, + ), + SizedBox( + width: 0.9.sw, + child: Text( + AppStrings.keySignInContent, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), ), ), - ), - SizedBox( - height: 30.h, - ), + SizedBox( + height: 30.h, + ), - ///Enter Phone Number Text Fields - const SignInTextField(), - ], + ///Enter Phone Number Text Fields + const SignInTextField(), + ], + ), ), ), ), - ), - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 20.0, vertical: 25.0), - child: _commonButton(context), - ), - ], + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 20.0, vertical: 25.0), + child: _commonButton(context), + ), + ], + ), ), ); } - ///Common Button Widget _commonButton(BuildContext context) { return CommonButton( diff --git a/lib/ui/checkout/mobile/checkout_mobile.dart b/lib/ui/checkout/mobile/checkout_mobile.dart index b7a518c..ac7a47a 100644 --- a/lib/ui/checkout/mobile/checkout_mobile.dart +++ b/lib/ui/checkout/mobile/checkout_mobile.dart @@ -1,32 +1,22 @@ import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; -import 'package:cardtrading/ui/checkout/mobile/helper/checkout_list.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; -import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/checkout/mobile/helper/checkout_body.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -class CheckoutMobile extends ConsumerStatefulWidget { +class CheckoutMobile extends StatelessWidget { const CheckoutMobile({this.cartModel,super.key}); final CartModel? cartModel; - @override - ConsumerState createState() => _CheckoutMobileState(); -} - -class _CheckoutMobileState extends ConsumerState { - @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( - title: Text( + appBar: CommonAppBar( + titleWidget: Text( AppStrings.keyCart, style: TextStyles.medium.copyWith(fontSize: 16.sp), ), @@ -35,235 +25,10 @@ class _CheckoutMobileState extends ConsumerState { Navigator.pop(context); }, icon: const Icon(Icons.arrow_back)), - centerTitle: true, - elevation: 0, + isTitleCentered: true, backgroundColor: AppColors.background, ), - body: SingleChildScrollView( - child: Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - final checkoutWatch = ref.watch(checkoutController); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - ...List.generate( - checkoutWatch.cartList.length, - (index) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - CheckoutList(checkoutWatch.cartList[index], index, () { - checkoutWatch.deleteCardFromCartList(index); - }, url: '${AppAssets.imgLocation}card_0.png'), - Divider( - thickness: 1.h, - ), - ], - ); - }, - ), - Padding( - padding: const EdgeInsets.all(20.0), - child: Text( - AppStrings.keyPaymentSummary, - textAlign: TextAlign.start, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - color: AppColors.golden, - ), - ), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keyTotalAmount, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.containerText, - ), - ), - Text( - AppStrings.keyTotalAmountValue, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - ], - ), - ), - Divider( - thickness: 1.h, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keyDiscount, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.containerText, - ), - ), - Text( - AppStrings.keyDash, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - ], - ), - ), - Divider( - thickness: 1.h, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keyDeliveryCharges, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.containerText, - ), - ), - Text( - AppStrings.keyDash, - style: TextStyles.regular.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - ], - ), - ), - Divider( - thickness: 1.h, - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keySubTotal, - style: TextStyles.semiBold.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - Text( - AppStrings.keySubTotalValue, - style: TextStyles.semiBold.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - ], - ), - ), - ], - ), - ), - SizedBox( - height: 50.h, - ), - Padding( - padding: const EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 34.0), - child: SizedBox( - width: double.infinity, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - width: 54.w, - height: 54.h, - decoration: BoxDecoration( - border: Border.all(color: AppColors.primary)), - child: Center( - child: InkWell( - child: const Icon( - Icons.add, - color: AppColors.primary, - size: 24, - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); - }, - ), - ), - ), - SizedBox( - height: 54.h, - width: 261.w, - child: CommonButton( - buttonText: '', - prefixWidget: Text( - AppStrings.keyCheckout, - style: TextStyles.semiBold.copyWith( - fontSize: 16.sp, - color: AppColors.dividerColor), - ), - buttonPadding: - const EdgeInsets.symmetric(horizontal: 20), - buttonBackgroundColor: AppColors.primary, - suffixWidget: const Icon( - Icons.arrow_forward, - color: AppColors.dividerColor, - ), - ), - ), - ], - ), - ), - ), - ], - ); - }, - ), - ), + body: CheckoutBody(cartModel: cartModel), ); } - - @override - void initState() { - super.initState(); - SchedulerBinding.instance.addPostFrameCallback((_) { - if(widget.cartModel != null){ - ref.watch(checkoutController).addCard(widget.cartModel as CartModel); - } - }); - } } diff --git a/lib/ui/checkout/mobile/helper/add_other_card_button.dart b/lib/ui/checkout/mobile/helper/add_other_card_button.dart index e69de29..f53e1d5 100644 --- a/lib/ui/checkout/mobile/helper/add_other_card_button.dart +++ b/lib/ui/checkout/mobile/helper/add_other_card_button.dart @@ -0,0 +1,38 @@ +import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class AddOtherCardButton extends StatelessWidget { + const AddOtherCardButton({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Container( + width: 54.w, + height: 54.h, + decoration: BoxDecoration(border: Border.all(color: AppColors.primary)), + child: Center( + child: InkWell( + child: const Icon( + Icons.add, + color: AppColors.primary, + size: 24, + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); + }, + ), + ), + ); + } +} diff --git a/lib/ui/checkout/mobile/helper/checkout_body.dart b/lib/ui/checkout/mobile/helper/checkout_body.dart index e69de29..b287e68 100644 --- a/lib/ui/checkout/mobile/helper/checkout_body.dart +++ b/lib/ui/checkout/mobile/helper/checkout_body.dart @@ -0,0 +1,206 @@ + +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; +import 'package:cardtrading/ui/checkout/mobile/helper/add_other_card_button.dart'; +import 'package:cardtrading/ui/checkout/mobile/helper/checkout_button.dart'; +import 'package:cardtrading/ui/checkout/mobile/helper/checkout_list.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class CheckoutBody extends StatelessWidget { + const CheckoutBody({ + super.key, + required this.cartModel, + }); + + final CartModel? cartModel; + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final checkoutWatch = ref.watch(checkoutController); + if(cartModel != null){ + checkoutWatch.addCard(cartModel as CartModel); + } + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + ...List.generate( + checkoutWatch.cartList.length, + (index) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + CheckoutList(checkoutWatch.cartList[index], index, () { + checkoutWatch.deleteCardFromCartList(index); + }, url: '${AppAssets.imgLocation}card_0.png'), + Divider( + thickness: 1.h, + ), + ], + ); + }, + ), + Padding( + padding: const EdgeInsets.all(20.0), + child: Text( + AppStrings.keyPaymentSummary, + textAlign: TextAlign.start, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + color: AppColors.golden, + ), + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyTotalAmount, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.containerText, + ), + ), + Text( + AppStrings.keyTotalAmountValue, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ], + ), + ), + Divider( + thickness: 1.h, + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyDiscount, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.containerText, + ), + ), + Text( + AppStrings.keyDash, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ], + ), + ), + Divider( + thickness: 1.h, + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 15.0.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyDeliveryCharges, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.containerText, + ), + ), + Text( + AppStrings.keyDash, + style: TextStyles.regular.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.checkoutTextColor, + ), + ), + ], + ), + ), + Divider( + thickness: 1.h, + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 15.0.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keySubTotal, + style: TextStyles.semiBold.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.checkoutTextColor, + ), + ), + Text( + AppStrings.keySubTotalValue, + style: TextStyles.semiBold.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.checkoutTextColor, + ), + ), + ], + ), + ), + ], + ), + ), + SizedBox( + height: 50.h, + ), + Padding( + padding: EdgeInsets.fromLTRB(20.0.w, 0.0.h, 20.0.w, 34.0.h), + child: const SizedBox( + width: double.infinity, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + AddOtherCardButton(), + ///Card Checkout Button + CheckoutButton(), + ], + ), + ), + ), + ], + ); + }, + ), + ); + } +} + diff --git a/lib/ui/checkout/mobile/helper/checkout_button.dart b/lib/ui/checkout/mobile/helper/checkout_button.dart index e69de29..780bbd1 100644 --- a/lib/ui/checkout/mobile/helper/checkout_button.dart +++ b/lib/ui/checkout/mobile/helper/checkout_button.dart @@ -0,0 +1,37 @@ + +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class CheckoutButton extends StatelessWidget { + const CheckoutButton({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 54.h, + width: 261.w, + child: CommonButton( + buttonText: '', + prefixWidget: Text( + AppStrings.keyCheckout, + style: TextStyles.semiBold.copyWith( + fontSize: 16.sp, + color: AppColors.dividerColor), + ), + buttonPadding: + const EdgeInsets.symmetric(horizontal: 20), + buttonBackgroundColor: AppColors.primary, + suffixWidget: const Icon( + Icons.arrow_forward, + color: AppColors.dividerColor, + ), + ), + ); + } +} diff --git a/lib/ui/choose_language/mobile/choose_language_mobile.dart b/lib/ui/choose_language/mobile/choose_language_mobile.dart index 3177a4f..95c777c 100644 --- a/lib/ui/choose_language/mobile/choose_language_mobile.dart +++ b/lib/ui/choose_language/mobile/choose_language_mobile.dart @@ -1,12 +1,13 @@ import 'package:cardtrading/framework/controllers/choose_language/choose_language_controller.dart'; -import 'package:cardtrading/ui/onboarding/onboarding.dart'; +import 'package:cardtrading/ui/choose_language/mobile/helper/choose_language_button.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:cardtrading/ui/choose_language/mobile/helper/choose_language_next_button.dart'; class ChooseLanguageMobile extends ConsumerStatefulWidget { const ChooseLanguageMobile({super.key}); @@ -20,115 +21,51 @@ class _ChooseLanguageMobileState extends ConsumerState { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( + appBar: const CommonAppBar( backgroundColor: Colors.transparent, - elevation: 0, + title: '', ), backgroundColor: AppColors.background, - body: _bodyWidget(context), - ); - } - - ///Body Widget - Widget _bodyWidget(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(left: 20.0, right: 20.0, bottom: 30), - child: Column( - children: [ - Expanded( - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - AppStrings.keyChooseLangTitle, - style: TextStyles.medium - .copyWith(fontSize: 18.sp, color: AppColors.golden), - ), - SizedBox(height: 10.h), - Text( - AppStrings.keyChooseLangContent, - style: TextStyles.regular - .copyWith(fontSize: 14.sp, color: AppColors.greyText), - ), + body: Padding( + padding: const EdgeInsets.only(left: 20.0, right: 20.0, bottom: 30), + child: Column( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppStrings.keyChooseLangTitle, + style: TextStyles.medium + .copyWith(fontSize: 18.sp, color: AppColors.golden), + ), + SizedBox(height: 10.h), + Text( + AppStrings.keyChooseLangContent, + style: TextStyles.regular + .copyWith(fontSize: 14.sp, color: AppColors.greyText), + ), - const SizedBox( - height: 40, - ), + const SizedBox( + height: 40, + ), - /// Buttons to Select Languages - ..._languageButtons(), - ], - ), - ), - - ///Common Button - _keepGoingButton(context), - ], - ), - ); - } - - List _languageButtons() { - return List.generate( - ref.watch(chooseLanguageController).languages.length, - (index) { - return Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - final chooseLanguageWatch = ref.watch(chooseLanguageController); - return Padding( - padding: EdgeInsets.only(bottom: 25.h), - child: CommonButton( - align: TextAlign.left, - buttonHeight: 46.h, - onPressed: () { - chooseLanguageWatch.changeLanguage(index); - }, - buttonPadding: EdgeInsets.symmetric(horizontal: 15.w), - buttonBackgroundColor: chooseLanguageWatch.selectedLanguage == - chooseLanguageWatch.languages[index] - ? AppColors.primary - : AppColors.buttonBg, - buttonText: chooseLanguageWatch.languages[index], - suffixWidget: chooseLanguageWatch.selectedLanguage == - chooseLanguageWatch.languages[index] - ? const Icon( - Icons.check, - color: Colors.black, - ) - : null, - buttonTextStyle: TextStyles.light.copyWith( - color: chooseLanguageWatch.selectedLanguage == - chooseLanguageWatch.languages[index] - ? AppColors.selectedButtonText - : AppColors.buttonText, - fontSize: 14.sp, - fontFamily: 'Sora', + /// Buttons to Select Languages + ...List.generate( + ref.watch(chooseLanguageController).languages.length, + (index) { + return ChooseLanguageButton(index: index); + }, + ), + ], ), ), - ); - }); - }, - ); - } - Widget _keepGoingButton(BuildContext context) { - ///Common Button Widget - return CommonButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) { - return const OnBoardingOne(); - }, - ), - ); - }, - buttonText: AppStrings.keyKeepGoing, - buttonTextStyle: TextStyles.semiBold.copyWith( - fontSize: 16.sp, - color: AppColors.selectedButtonText, + ///Choose Language Next Button + const ChooseLanguageNextButton(), + ], + ), ), ); } diff --git a/lib/ui/choose_language/mobile/helper/choose_language_button.dart b/lib/ui/choose_language/mobile/helper/choose_language_button.dart index e69de29..645bdab 100644 --- a/lib/ui/choose_language/mobile/helper/choose_language_button.dart +++ b/lib/ui/choose_language/mobile/helper/choose_language_button.dart @@ -0,0 +1,56 @@ + +import 'package:cardtrading/framework/controllers/choose_language/choose_language_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class ChooseLanguageButton extends StatelessWidget { + const ChooseLanguageButton({ + super.key, required this.index, + }); + + final int index; + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(bottom: 25.h), + child: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final chooseLanguageWatch = ref.watch(chooseLanguageController); + return CommonButton( + align: TextAlign.left, + buttonHeight: 46.h, + onPressed: () { + chooseLanguageWatch.changeLanguage(index); + }, + buttonPadding: EdgeInsets.symmetric(horizontal: 15.w), + buttonBackgroundColor: chooseLanguageWatch.selectedLanguage == + chooseLanguageWatch.languages[index] + ? AppColors.primary + : AppColors.buttonBg, + buttonText: chooseLanguageWatch.languages[index], + suffixWidget: chooseLanguageWatch.selectedLanguage == + chooseLanguageWatch.languages[index] + ? const Icon( + Icons.check, + color: Colors.black, + ) + : null, + buttonTextStyle: TextStyles.light.copyWith( + color: chooseLanguageWatch.selectedLanguage == + chooseLanguageWatch.languages[index] + ? AppColors.selectedButtonText + : AppColors.buttonText, + fontSize: 14.sp, + fontFamily: 'Sora', + ), + ); + } + ), + ); + } +} diff --git a/lib/ui/choose_language/mobile/helper/choose_language_next_button.dart b/lib/ui/choose_language/mobile/helper/choose_language_next_button.dart index e69de29..0cdf0a5 100644 --- a/lib/ui/choose_language/mobile/helper/choose_language_next_button.dart +++ b/lib/ui/choose_language/mobile/helper/choose_language_next_button.dart @@ -0,0 +1,34 @@ +import 'package:cardtrading/ui/onboarding/onboarding.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class ChooseLanguageNextButton extends StatelessWidget { + const ChooseLanguageNextButton({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return CommonButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) { + return const OnBoardingOne(); + }, + ), + ); + }, + buttonText: AppStrings.keyKeepGoing, + buttonTextStyle: TextStyles.semiBold.copyWith( + fontSize: 16.sp, + color: AppColors.selectedButtonText, + ), + ); + } +} diff --git a/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart b/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart index bac7f9b..c40f2c8 100644 --- a/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart +++ b/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart @@ -1,43 +1,41 @@ -import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profie_controller.dart'; -import 'package:cardtrading/ui/complete_your_profile/add_address.dart'; +import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profile_controller.dart'; +import 'package:cardtrading/ui/complete_your_profile/mobile/helper/add_address_screen.dart'; +import 'package:cardtrading/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; -import 'package:email_validator/email_validator.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class CompleteProfileMobile extends ConsumerStatefulWidget { +class CompleteProfileMobile extends StatelessWidget { const CompleteProfileMobile({super.key}); - @override - ConsumerState createState() => - _CompleteProfileMobileState(); -} - -class _CompleteProfileMobileState extends ConsumerState { - final _formKey = GlobalKey(); - @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( + appBar: CommonAppBar( backgroundColor: AppColors.background, - elevation: 0, - centerTitle: true, - title: Text( - AppStrings.keyCompleteYourProfile, - style: TextStyles.medium.copyWith( - fontSize: 16.sp, - ), - ), + isTitleCentered: true, + titleWidget: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? widget) { + final completeProfileWatch = ref.watch(completeProfileController); + return Text( + completeProfileWatch.page == 0 + ? AppStrings.keyCompleteYourProfile + : AppStrings.keyAddAddress, + style: TextStyles.medium.copyWith( + fontSize: 16.sp, + overflow: TextOverflow.ellipsis, + ), + ); + }), leading: Padding( - padding: const EdgeInsets.all(12.0), + padding: EdgeInsets.all(12.0.w), child: InkWell( onTap: () { Navigator.pop(context); @@ -50,212 +48,21 @@ class _CompleteProfileMobileState extends ConsumerState { ), ), ), - body: Form( - key: _formKey, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: Column( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 3, - child: SizedBox( - width: 180, - child: Text( - AppStrings.keyEnterYourPersonalDetails, - softWrap: true, - maxLines: 3, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, - height: 1.5, - ), - ), - ), - ), - const Spacer( - flex: 1, - ), - ...List.generate( - 2, - (index) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: Container( - width: 8.w, - height: 8.h, - decoration: BoxDecoration( - border: index == 1 - ? Border.all( - color: AppColors.indicatorColor, - ) - : null, - color: index == 0 - ? AppColors.primary - : Colors.transparent, - ), - ), - ); - }, - ), - ], - ), - SizedBox( - height: 15.h, - ), - Text( - AppStrings.keyCompleteYourProfileContent, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - height: 1.5, - ), - ), - SizedBox( - height: 25.h, - ), - TextFormField( - cursorColor: AppColors.primary, - validator: (value) { - if (!EmailValidator.validate(value!)) { - return 'Enter Valid Email'; - } - return null; - }, - decoration: InputDecoration( - contentPadding: const EdgeInsets.all(18.0), - hintText: AppStrings.keyUsername, - fillColor: AppColors.buttonBg, - filled: true, - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), - SizedBox( - height: 20.h, - ), - Consumer( - builder: - (BuildContext context, WidgetRef ref, Widget? child) { - final completeProfileWatch = - ref.watch(completeProfileController); - return InkWell( - onTap: () { - completeProfileWatch.addReferral(); - }, - child: Text( - AppStrings.keyHaveReferral, - style: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.primary, - fontSize: 12.sp, - decoration: TextDecoration.underline, - decorationColor: AppColors.primary, - ), - ), - ); - }, - ), - SizedBox( - height: 20.h, - ), - Consumer( - builder: - (BuildContext context, WidgetRef ref, Widget? child) { - final completeProfileWatch = - ref.watch(completeProfileController); - return Visibility( - visible: completeProfileWatch.hasReferral, - child: TextFormField( - cursorColor: AppColors.primary, - decoration: InputDecoration( - hintText: AppStrings.keyEnterReferral, - fillColor: AppColors.buttonBg, - filled: true, - contentPadding: const EdgeInsets.symmetric( - horizontal: 12.0, vertical: 20.0), - suffixIcon: InkWell( - onTap: () { - completeProfileWatch.addReferral(); - }, - child: Container( - width: 87.w, - height: 54.h, - padding: EdgeInsets.zero, - color: AppColors.primary, - child: Center( - child: Text( - AppStrings.keyApply, - textAlign: TextAlign.center, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - fontFamily: 'Sora', - backgroundColor: AppColors.primary, - color: AppColors.selectedButtonText, - ), - ), - ), - ), - ), - hintStyle: TextStyles.light.copyWith( - fontFamily: 'Sora', - color: AppColors.buttonText, - backgroundColor: AppColors.buttonBg, - ), - border: InputBorder.none, - ), - ), - ); - }, - ), - ], - ), - ), - Padding( - padding: EdgeInsets.symmetric(vertical: 24.h), - child: CommonButton( - buttonPadding: const EdgeInsets.all(8.0), - prefixWidget: Text( - AppStrings.keyNext, - style: TextStyles.semiBold.copyWith( - color: AppColors.selectedButtonText, - fontSize: 16.sp, - ), - ), - buttonText: ' ', - suffixWidget: const Icon( - Icons.arrow_forward_outlined, - color: AppColors.selectedButtonText, - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - _formKey.currentState!.save(); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const AddAddress(); - }, - ), - ); - } - }, - ), - ), - ], - ), - ), - ), + body: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? widget) { + final completeProfileWatch = ref.watch(completeProfileController); + return PageView( + controller: completeProfileWatch.pageController, + physics: const ScrollPhysics(parent: NeverScrollableScrollPhysics()), + onPageChanged: (index) { + completeProfileWatch.changePage(index); + }, + children: const [ + CompleteYourProfile(), + AddAddressScreen(), + ], + ); + }), ); } } diff --git a/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart b/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart index e69de29..5e95161 100644 --- a/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart +++ b/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart @@ -0,0 +1,390 @@ +import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profile_controller.dart'; +import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:dropdown_button2/dropdown_button2.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class AddAddressScreen extends StatelessWidget { + const AddAddressScreen({super.key}); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final completeProfileWatch = ref.watch(completeProfileController); + return Form( + key: completeProfileWatch.secondPageFormKey, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0.w), + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 3, + child: SizedBox( + width: 180, + child: Text( + AppStrings.keyEnterYourAddress, + softWrap: true, + maxLines: 3, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + height: 1.5, + ), + ), + ), + ), + const Spacer(), + ...List.generate( + 2, + (index) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + width: 8.w, + height: 8.h, + decoration: const BoxDecoration( + color: AppColors.primary), + ), + ); + }, + ), + ], + ), + SizedBox( + height: 15.h, + ), + Text( + AppStrings.keyEnterYourAddressContent, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + height: 1.5, + ), + ), + SizedBox( + height: 25.h, + ), + DropdownButtonFormField2( + isExpanded: true, + decoration: const InputDecoration( + border: InputBorder.none, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: EdgeInsets.all(16.0), + ), + validator: (value) { + if (!completeProfileWatch.areas.contains(value)) { + return 'This Field is mandatory'; + } + return null; + }, + items: completeProfileWatch.areas + .map( + (String item) => DropdownMenuItem( + value: item, + child: Text( + item, + style: TextStyles.light.copyWith( + color: AppColors.buttonText, + ), + ), + ), + ) + .toList(), + value: completeProfileWatch.area, + hint: Text( + 'Area*', + style: TextStyles.light + .copyWith(color: AppColors.buttonText), + ), + onChanged: (value) { + completeProfileWatch.setArea(value); + }, + ), + SizedBox( + height: 20.h, + ), + DropdownButtonFormField2( + isExpanded: true, + decoration: const InputDecoration( + border: InputBorder.none, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: EdgeInsets.all(16.0), + ), + onMenuStateChange: (isChanged) { + completeProfileWatch.secondPageFormKey.currentState! + .validate(); + }, + validator: (value) { + if (!completeProfileWatch.blocks.contains(value)) { + return 'This Field is mandatory'; + } + return null; + }, + items: completeProfileWatch.blocks + .map( + (String item) => DropdownMenuItem( + value: item, + child: Text( + item, + style: TextStyles.light.copyWith( + color: AppColors.buttonText, + ), + ), + ), + ) + .toList(), + value: completeProfileWatch.block, + hint: Text( + 'Block*', + style: TextStyles.light + .copyWith(color: AppColors.buttonText), + ), + onChanged: (value) { + completeProfileWatch.setBlock(value); + }, + ), + SizedBox( + height: 20.h, + ), + DropdownButtonFormField2( + isExpanded: true, + decoration: const InputDecoration( + border: InputBorder.none, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: EdgeInsets.all(16.0), + ), + onMenuStateChange: (isChanged) { + completeProfileWatch.secondPageFormKey.currentState! + .validate(); + }, + validator: (value) { + if (!completeProfileWatch.streets.contains(value)) { + return 'This Field is mandatory'; + } + return null; + }, + items: completeProfileWatch.streets + .map( + (String item) => DropdownMenuItem( + value: item, + child: Text( + item, + style: TextStyles.light.copyWith( + color: AppColors.buttonText, + ), + ), + ), + ) + .toList(), + value: completeProfileWatch.street, + hint: Text( + 'Street*', + style: TextStyles.light + .copyWith(color: AppColors.buttonText), + ), + onChanged: (value) { + completeProfileWatch.setStreet(value); + }, + ), + SizedBox( + height: 20.h, + ), + TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyAvenue, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyBuilding, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyFloor, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + TextFormField( + cursorColor: AppColors.primary, + validator: (value) { + if (value!.length > 1) { + return null; + } + return 'This field is mandatory.'; + }, + onChanged: (value) { + completeProfileWatch.secondPageFormKey.currentState! + .validate(); + }, + decoration: InputDecoration( + contentPadding: const EdgeInsets.all(18.0), + hintText: AppStrings.keyHouseNo, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + Text( + AppStrings.keyAddressType, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + height: 1.5, + ), + ), + SizedBox( + height: 10.h, + ), + Row( + children: [ + ...List.generate( + 3, + (index) { + return Row( + children: [ + InkWell( + child: Container( + decoration: BoxDecoration( + color: + completeProfileWatch.id == index + ? AppColors.primary + : AppColors.buttonBg, + ), + padding: EdgeInsets.symmetric( + horizontal: 16.0.w, + vertical: 8.0.h), + child: Text( + completeProfileWatch + .addressTypes[index], + style: TextStyles.regular.copyWith( + color: completeProfileWatch.id == + index + ? AppColors.selectedButtonText + : AppColors.greyText, + fontSize: 12.sp, + ), + ), + ), + onTap: () { + completeProfileWatch.setId(index); + }, + ), + SizedBox( + width: 10.0.w, + ), + ], + ); + }, + ), + ], + ) + ], + ), + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 24.h), + child: CommonButton( + buttonPadding: const EdgeInsets.all(8.0), + prefixWidget: Text( + AppStrings.keySignUp, + style: TextStyles.semiBold.copyWith( + color: AppColors.selectedButtonText, + fontSize: 16.sp, + ), + ), + buttonText: ' ', + suffixWidget: const Icon( + Icons.arrow_forward_outlined, + color: AppColors.selectedButtonText, + ), + onPressed: () { + if (completeProfileWatch.secondPageFormKey.currentState! + .validate()) { + completeProfileWatch.secondPageFormKey.currentState! + .save(); + completeProfileWatch.resetPage(); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); + } + }, + ), + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart b/lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart index e69de29..6b74d6c 100644 --- a/lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart +++ b/lib/ui/complete_your_profile/mobile/helper/complete_profile_screen.dart @@ -0,0 +1,208 @@ +import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profile_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class CompleteYourProfile extends StatelessWidget { + const CompleteYourProfile({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? widget) { + final completeProfileWatch = ref.watch(completeProfileController); + return Form( + key: completeProfileWatch.firstPageFormKey, + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0.w), + child: Column( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 3, + child: SizedBox( + width: 180, + child: Text( + AppStrings.keyEnterYourPersonalDetails, + softWrap: true, + maxLines: 3, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + height: 1.5, + ), + ), + ), + ), + const Spacer( + flex: 1, + ), + ...List.generate( + 2, + (index) { + return Padding( + padding: EdgeInsets.all(4.0.w), + child: Container( + width: 8.w, + height: 8.h, + decoration: BoxDecoration( + border: index == 1 + ? Border.all( + color: AppColors.indicatorColor, + ) + : null, + color: index == 0 + ? AppColors.primary + : Colors.transparent, + ), + ), + ); + }, + ), + ], + ), + SizedBox( + height: 15.h, + ), + Text( + AppStrings.keyCompleteYourProfileContent, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + height: 1.5, + ), + ), + SizedBox( + height: 25.h, + ), + TextFormField( + cursorColor: AppColors.primary, + keyboardType: TextInputType.emailAddress, + validator: (value) { + return completeProfileWatch.validateEmail(value); + }, + decoration: InputDecoration( + contentPadding: EdgeInsets.all(18.0.w), + hintText: AppStrings.keyUsername, + fillColor: AppColors.buttonBg, + filled: true, + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + SizedBox( + height: 20.h, + ), + InkWell( + onTap: () { + completeProfileWatch.addReferral(); + }, + child: Text( + AppStrings.keyHaveReferral, + style: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.primary, + fontSize: 12.sp, + decoration: TextDecoration.underline, + decorationColor: AppColors.primary, + ), + ), + ), + SizedBox( + height: 20.h, + ), + Visibility( + visible: completeProfileWatch.hasReferral, + child: TextFormField( + cursorColor: AppColors.primary, + decoration: InputDecoration( + hintText: AppStrings.keyEnterReferral, + fillColor: AppColors.buttonBg, + filled: true, + contentPadding: const EdgeInsets.symmetric( + horizontal: 12.0, vertical: 20.0), + suffixIcon: InkWell( + onTap: () { + completeProfileWatch.hideReferral(); + }, + child: Container( + width: 87.w, + height: 54.h, + padding: EdgeInsets.zero, + color: AppColors.primary, + child: Center( + child: Text( + AppStrings.keyApply, + textAlign: TextAlign.center, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + fontFamily: 'Sora', + backgroundColor: AppColors.primary, + color: AppColors.selectedButtonText, + ), + ), + ), + ), + ), + hintStyle: TextStyles.light.copyWith( + fontFamily: 'Sora', + color: AppColors.buttonText, + backgroundColor: AppColors.buttonBg, + ), + border: InputBorder.none, + ), + ), + ), + ], + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 24.h), + child: CommonButton( + buttonPadding: const EdgeInsets.all(8.0), + prefixWidget: Text( + AppStrings.keyNext, + style: TextStyles.semiBold.copyWith( + color: AppColors.selectedButtonText, + fontSize: 16.sp, + ), + ), + buttonText: ' ', + suffixWidget: const Icon( + Icons.arrow_forward_outlined, + color: AppColors.selectedButtonText, + ), + onPressed: () { + if (completeProfileWatch.firstPageFormKey.currentState! + .validate()) { + completeProfileWatch.firstPageFormKey.currentState! + .save(); + completeProfileWatch.nextPage(); + } + }, + ), + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/featured_seller/mobile/featured_seller_mobile.dart b/lib/ui/featured_seller/mobile/featured_seller_mobile.dart index b9df1d1..9d13d90 100644 --- a/lib/ui/featured_seller/mobile/featured_seller_mobile.dart +++ b/lib/ui/featured_seller/mobile/featured_seller_mobile.dart @@ -1,7 +1,9 @@ -import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/featured_seller/mobile/helper/featured_seller_body.dart'; +import 'package:cardtrading/ui/home_screen/home_screen.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -12,59 +14,28 @@ class FeaturedSellerMobile extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( + appBar: CommonAppBar( backgroundColor: AppColors.background, leading: IconButton( onPressed: () { - Navigator.pop(context); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); }, icon: const Icon(Icons.arrow_back_outlined), ), - title: Text( + titleWidget: Text( AppStrings.keyFeaturedSellers, style: TextStyles.bold.copyWith(fontSize: 16.sp), ), - centerTitle: true, - ), - body: ListView.separated( - shrinkWrap: true, - itemBuilder: (BuildContext context, int index) { - return InkWell( - onTap: () {}, - child: Row( - children: [ - Container( - padding: const EdgeInsets.all(8.0), - width: 64.w, - height: 64.h, - child: CircleAvatar( - radius: 50, - backgroundImage: AssetImage( - '${AppAssets.imgLocation}profile_${index % 5}.png'), - ), - ), - Text( - AppStrings.profiles[index % 5], - textAlign: TextAlign.center, - maxLines: 2, - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - fontSize: 12.sp, - fontFamily: 'Sora', - ), - ), - ], - ), - ); - }, - itemCount: 10, - separatorBuilder: (BuildContext context, int index) { - return const Divider( - thickness: 1.0, - color: AppColors.indicatorColor, - ); - }, + isTitleCentered: true, ), + body: const FeaturedSellerBody(), ); } } diff --git a/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart b/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart index e69de29..0676126 100644 --- a/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart +++ b/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart @@ -0,0 +1,56 @@ +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class FeaturedSellerBody extends StatelessWidget { + const FeaturedSellerBody({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return ListView.separated( + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + return InkWell( + onTap: () {}, + child: Row( + children: [ + Container( + padding: EdgeInsets.all(8.0.w), + width: 64.w, + height: 64.h, + child: CircleAvatar( + radius: 50.r, + backgroundImage: AssetImage( + '${AppAssets.imgLocation}profile_${index % 5}.png'), + ), + ), + Text( + AppStrings.profiles[index % 5], + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + fontSize: 12.sp, + fontFamily: 'Sora', + ), + ), + ], + ), + ); + }, + itemCount: 10, + separatorBuilder: (BuildContext context, int index) { + return const Divider( + thickness: 1.0, + color: AppColors.indicatorColor, + ); + }, + ); + } +} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart b/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart index e69de29..baccb8c 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart @@ -0,0 +1,48 @@ +import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; +import 'package:cardtrading/ui/checkout/checkout.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class HomeScreenAppBarActions extends StatelessWidget { + const HomeScreenAppBarActions({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? widget) { + final homeScreenWatch = ref.watch(homeScreenController); + return Row( + children: [ + ...List.generate( + 3, + (index) { + return InkWell( + onTap: () { + if (index == 1) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const Checkout(); + }, + ), + ); + } + }, + child: Padding( + padding: const EdgeInsets.all(6.0), + child: SvgPicture.asset( + homeScreenWatch.appBarActionList[index]), + ), + ); + }, + ), + ], + ); + }, + ); + } +} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_banner.dart b/lib/ui/home_screen/mobile/helper/home_screen_banner.dart index 69fd411..1dda6ee 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_banner.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_banner.dart @@ -41,8 +41,8 @@ class HomeScreenBanner extends StatelessWidget { left: 0, child: Container( height: 51.h, - padding: - EdgeInsets.symmetric(horizontal: 5.w, vertical: 5.h), + padding: EdgeInsets.symmetric( + horizontal: 5.w, vertical: 5.h), color: index == 1 ? AppColors.white : AppColors.primary, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -56,26 +56,32 @@ class HomeScreenBanner extends StatelessWidget { text: TextSpan( text: AppStrings.keyBuy, style: TextStyles.bold.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 12.sp, - color: AppColors.background), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 12.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.background, + ), children: [ TextSpan( text: AppStrings.keyWith, style: TextStyles.regular.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 12.sp, - color: AppColors.background), + fontFamily: + TextStyles.secondaryFontFamily, + overflow: TextOverflow.ellipsis, + fontSize: 12.sp, + color: AppColors.background, + ), ), TextSpan( text: AppStrings.keyConfidence, style: TextStyles.bold.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 12.sp, - color: AppColors.background), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 12.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.background, + ), ), ], ), @@ -84,10 +90,12 @@ class HomeScreenBanner extends StatelessWidget { Text( AppStrings.keyBannerSubtitle, style: TextStyles.light.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 8.sp, - color: AppColors.background), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 8.sp, + overflow: TextOverflow.ellipsis, + color: AppColors.background, + ), ) ], ), diff --git a/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart b/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart index e69de29..7c8d805 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart @@ -0,0 +1,96 @@ +import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; +import 'package:cardtrading/ui/authentication/get_otp.dart'; +import 'package:cardtrading/ui/card_shop/card_shop.dart'; +import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class HomeScreenBottomNavigationBar extends StatelessWidget { + const HomeScreenBottomNavigationBar({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final homeScreenWatch = ref.watch(homeScreenController); + return Padding( + padding: EdgeInsets.only(bottom: 16.0.h), + child: BottomNavigationBar( + items: [ + ...List.generate( + 4, + (index) { + return BottomNavigationBarItem( + icon: Container( + padding: const EdgeInsets.only(top: 8.0), + decoration: BoxDecoration( + border: BorderDirectional( + top: BorderSide( + color: homeScreenWatch.id == index + ? AppColors.primary + : Colors.transparent, + width: 2.0, + ), + ), + ), + child: SvgPicture.asset( + homeScreenWatch.bottomNavigationBarSvgPath[index]), + ), + label: homeScreenWatch.bottomNavigationBarLabels[index], + tooltip: homeScreenWatch.bottomNavigationBarLabels[index], + backgroundColor: AppColors.background); + }, + ), + ], + selectedFontSize: 10.sp, + unselectedFontSize: 10.sp, + backgroundColor: AppColors.background, + currentIndex: homeScreenWatch.id, + type: BottomNavigationBarType.shifting, + showUnselectedLabels: true, + selectedLabelStyle: TextStyles.regular + .copyWith(color: AppColors.primary, fontSize: 12.sp), + selectedItemColor: AppColors.primary, + unselectedLabelStyle: TextStyles.regular + .copyWith(color: AppColors.white, fontSize: 12.sp), + onTap: (index) { + homeScreenWatch.setId(newId: index); + index == 1 || index == 3 + ? Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const GetOtp(); + }, + ), + ) + : index == 2 + ? Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const CardShop(); + }, + ), + ) + : Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); + }, + ), + ); + }, + ); + } +} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart b/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart index e69de29..3ef3779 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart @@ -0,0 +1,33 @@ +import 'package:cardtrading/ui/utils/widget/shop_card.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class HomeScreenCardsGrid extends StatelessWidget { + const HomeScreenCardsGrid({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Container( + width: 0.9.sw, + padding: EdgeInsets.symmetric(vertical: 8.0.h), + child: GridView.builder( + physics: const NeverScrollableScrollPhysics(), + itemCount: 6, + shrinkWrap: true, + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + mainAxisSpacing: 2, + crossAxisSpacing: 1, + crossAxisCount: 2, + childAspectRatio: 0.5, + ), + itemBuilder: (context, index) { + return ShopCard( + index: index, + ); + }, + ), + ); + } +} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_description.dart b/lib/ui/home_screen/mobile/helper/home_screen_description.dart index 006beb6..602d07b 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_description.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_description.dart @@ -5,30 +5,31 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeScreenDescription extends StatelessWidget { - const HomeScreenDescription({super.key, required this.title,this.onTap}); + const HomeScreenDescription({super.key, required this.title, this.onTap}); + final String title; final void Function()? onTap; @override Widget build(BuildContext context) { return Padding( - padding: - const EdgeInsets.symmetric(horizontal: 12.0, vertical: 4.0), + padding: EdgeInsets.symmetric(horizontal: 12.0.w, vertical: 4.0.h), child: Row( - mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( title, + overflow: TextOverflow.ellipsis, style: TextStyles.regular .copyWith(color: AppColors.golden, fontSize: 16.sp), ), InkWell( - onTap: onTap ?? (){}, + onTap: onTap ?? () {}, child: Text( AppStrings.keySeeAll, - style: - TextStyles.regular.copyWith(color: AppColors.primary), + style: TextStyles.regular.copyWith( + color: AppColors.primary, + ), ), ), ], diff --git a/lib/ui/home_screen/mobile/helper/home_screen_divider.dart b/lib/ui/home_screen/mobile/helper/home_screen_divider.dart index b1c3696..106b3e6 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_divider.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_divider.dart @@ -1,15 +1,16 @@ import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeScreenDivider extends StatelessWidget { const HomeScreenDivider({super.key}); @override Widget build(BuildContext context) { - return const Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), + return Padding( + padding: EdgeInsets.symmetric(horizontal: 8.0.w), child: Divider( - thickness: 1.5, + thickness: 1.5.h, color: AppColors.dividerColor, ), ); diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart index ccaa6af..c297d7c 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart @@ -1,55 +1,56 @@ import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; +import 'package:cardtrading/ui/home_screen/home_screen.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer_body.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class HomeScreenDrawer extends ConsumerStatefulWidget { +class HomeScreenDrawer extends StatelessWidget { const HomeScreenDrawer({super.key}); - @override - ConsumerState createState() => _HomeScreenDrawerState(); -} - -class _HomeScreenDrawerState extends ConsumerState { - @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, + appBar: CommonAppBar( + isLeadingEnable: false, backgroundColor: AppColors.background, - elevation: 0, leading: InkWell( child: Padding( - padding: EdgeInsets.all(10.0.r), + padding: EdgeInsets.all(10.0.w), child: SvgPicture.asset('${AppAssets.svgLocation}close_line.svg'), ), onTap: () { - Navigator.pop(context); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); }, ), - title: const Text(AppStrings.keyWalterWhite), - centerTitle: true, + title: AppStrings.keyWalterWhite, + isTitleCentered: true, actions: [ Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { + builder: (BuildContext context, WidgetRef ref, Widget? child) { final homeScreenWatch = ref.watch(homeScreenController); - return InkWell( - onTap: () { - homeScreenWatch.changeMode(); - }, - child: Padding( - padding: EdgeInsets.all(8.0.r), - child: SvgPicture.asset(homeScreenWatch.url), - ), - ); - } - ), + return InkWell( + onTap: () { + homeScreenWatch.changeMode(); + }, + child: Padding( + padding: EdgeInsets.all(8.0.w), + child: SvgPicture.asset(homeScreenWatch.url), + ), + ); + }), ], ), backgroundColor: AppColors.background, diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart index 51f14b5..e9768c1 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart @@ -13,21 +13,15 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/svg.dart'; -class HomeScreenDrawerBody extends ConsumerStatefulWidget { +class HomeScreenDrawerBody extends StatelessWidget { const HomeScreenDrawerBody({super.key}); - @override - ConsumerState createState() => _HomeScreenDrawerBodyState(); -} - -class _HomeScreenDrawerBodyState extends ConsumerState { - @override Widget build(BuildContext context) { ///Drawer for Home Screen return Padding( - padding: EdgeInsets.all(8.0.r), + padding: EdgeInsets.all(8.0.w), child: ListView.separated( shrinkWrap: true, physics: const BouncingScrollPhysics(), @@ -55,7 +49,6 @@ class _HomeScreenDrawerBodyState extends ConsumerState { ), ); } else if (index == 3) { - homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -65,7 +58,6 @@ class _HomeScreenDrawerBodyState extends ConsumerState { ), ); } else if (index == 5) { - homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -75,7 +67,6 @@ class _HomeScreenDrawerBodyState extends ConsumerState { ), ); } else if (index == 6) { - homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -85,7 +76,6 @@ class _HomeScreenDrawerBodyState extends ConsumerState { ), ); } else if (index == 9) { - homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -95,7 +85,6 @@ class _HomeScreenDrawerBodyState extends ConsumerState { ), ); } else { - homeScreenDrawerWatch.setOrIncrementId(newId: 0); Navigator.push( context, MaterialPageRoute( diff --git a/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart b/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart index b133f17..cdca134 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart @@ -9,8 +9,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeScreenFeaturedCollectionList extends StatelessWidget { const HomeScreenFeaturedCollectionList({super.key}); - final int count = 10; - @override Widget build(BuildContext context) { return SizedBox( @@ -27,22 +25,25 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { SizedBox( width: 0.9.sw, child: Row( - mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ index == 0 - ? const CommonTitle(text: AppStrings.keyFeaturedCollection) + ? const CommonTitle( + text: AppStrings.keyFeaturedCollection) : const Text(''), RichText( text: TextSpan( text: index < 9 ? '0${index + 1}' : '${index + 1}', - style: TextStyles.regular - .copyWith(color: AppColors.primary), + style: TextStyles.regular.copyWith( + color: AppColors.primary, + overflow: TextOverflow.ellipsis, + ), children: [ TextSpan( - text: '/$count', - style: TextStyles.regular - .copyWith(color: AppColors.greyText), + text: '/10', + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + overflow: TextOverflow.ellipsis), ), ], ), @@ -52,9 +53,11 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { ), Expanded( child: Padding( - padding: const EdgeInsets.all(16.0), + padding: EdgeInsets.all(16.0.w), child: Image.asset( - index == 1 ?'${AppAssets.imgLocation}card_1.png' :'${AppAssets.imgLocation}card_0.png', + index == 1 + ? '${AppAssets.imgLocation}card_1.png' + : '${AppAssets.imgLocation}card_0.png', width: 178.w, height: 300.h, fit: BoxFit.contain, @@ -68,7 +71,6 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( - mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( @@ -76,9 +78,12 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { child: Text( AppStrings.key1993, softWrap: true, + overflow: TextOverflow.ellipsis, maxLines: 2, - style: TextStyles.regular - .copyWith(color: AppColors.white, fontSize: 16), + style: TextStyles.regular.copyWith( + color: AppColors.white, + fontSize: 16.sp, + ), ), ), ], @@ -87,13 +92,18 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { children: [ Text( 'PSA 5', - style: TextStyles.regular - .copyWith(color: AppColors.golden, fontSize: 16), + overflow: TextOverflow.ellipsis, + style: TextStyles.regular.copyWith( + color: AppColors.golden, + fontSize: 16.sp, + ), ), Text( '\$300.10', - style: TextStyles.regular - .copyWith(color: AppColors.primary), + overflow: TextOverflow.ellipsis, + style: TextStyles.regular.copyWith( + color: AppColors.primary, + ), ), ], ) diff --git a/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart b/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart index 9fec087..55a22f2 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart @@ -10,47 +10,48 @@ class HomeScreenProfiles extends StatelessWidget { @override Widget build(BuildContext context) { - return - Container( - padding: - const EdgeInsets.symmetric(horizontal: 8.0, vertical: 6.0), - height: 120.h, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemBuilder: (context, index) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Flexible( - child: SizedBox( - width: 56.w, - height: 56.h, - child: CircleAvatar( - radius: 50, - backgroundImage: AssetImage( - '${AppAssets.imgLocation}profile_${index % 5}.png'), - ), + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 6.0), + height: 120.h, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Padding( + padding: EdgeInsets.all(8.0.w), + child: Column( + children: [ + Flexible( + child: SizedBox( + width: 56.w, + height: 56.h, + child: CircleAvatar( + radius: 50.r, + backgroundImage: AssetImage( + '${AppAssets.imgLocation}profile_${index % 5}.png'), ), ), - Flexible( - child: SizedBox( - width: 56.w, - child: Text( - AppStrings.profiles[index % 5], - textAlign: TextAlign.center, - maxLines: 2, - style: TextStyles.regular - .copyWith(color: AppColors.greyText,fontSize: 12.sp), + ), + Flexible( + child: SizedBox( + width: 56.w, + child: Text( + AppStrings.profiles[index % 5], + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + fontSize: 12.sp, ), ), ), - ], - ), - ); - }, - itemCount: 10, - ), - ); + ), + ], + ), + ); + }, + itemCount: 10, + ), + ); } } diff --git a/lib/ui/home_screen/mobile/home_screen_mobile.dart b/lib/ui/home_screen/mobile/home_screen_mobile.dart index 3a991e3..143f4a1 100644 --- a/lib/ui/home_screen/mobile/home_screen_mobile.dart +++ b/lib/ui/home_screen/mobile/home_screen_mobile.dart @@ -1,9 +1,8 @@ -import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; -import 'package:cardtrading/ui/authentication/get_otp.dart'; import 'package:cardtrading/ui/card_shop/card_shop.dart'; -import 'package:cardtrading/ui/checkout/checkout.dart'; import 'package:cardtrading/ui/featured_seller/featured_seller.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart'; +import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart'; +import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_card_grid.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_description.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_divider.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; @@ -12,64 +11,37 @@ import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_profiles.da import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/shop_card.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; - import 'helper/home_screen_banner.dart'; -class HomeScreenMobile extends ConsumerStatefulWidget { +class HomeScreenMobile extends StatelessWidget { const HomeScreenMobile({super.key}); - @override - ConsumerState createState() => _HomeScreenMobileState(); -} - -class _HomeScreenMobileState extends ConsumerState { - final GlobalKey _globalKey = GlobalKey(); - @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - key: _globalKey, - appBar: AppBar( + + ///Common App Bar + appBar: CommonAppBar( backgroundColor: AppColors.background, leading: IconButton( icon: SvgPicture.asset('${AppAssets.svgLocation}menu.svg'), onPressed: () { - _globalKey.currentState!.openDrawer(); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreenDrawer(); + }, + ), + ); }, ), - actions: [ - ...List.generate( - 3, - (index) { - final homeScreenWatch = ref.watch(homeScreenController); - return InkWell( - onTap: (){ - if(index == 1) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const Checkout(); - }, - ), - ); - } - }, - child: Padding( - padding: const EdgeInsets.all(6.0), - child: - SvgPicture.asset(homeScreenWatch.appBarActionList[index]), - ), - ); - }, - ), + actions: const [ + HomeScreenAppBarActions(), ], ), drawer: const HomeScreenDrawer(), @@ -114,105 +86,11 @@ class _HomeScreenMobileState extends ConsumerState { ); }, ), - Container( - width: 0.9.sw, - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: GridView.builder( - physics: const NeverScrollableScrollPhysics(), - itemCount: 6, - shrinkWrap: true, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - mainAxisSpacing: 2, - crossAxisSpacing: 1, - crossAxisCount: 2, - childAspectRatio: 0.5, - ), - itemBuilder: (context, index) { - return ShopCard( - index: index, - ); - }, - ), - ), + const HomeScreenCardsGrid(), ], ), ), - bottomNavigationBar: Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - final homeScreenWatch = ref.watch(homeScreenController); - return Padding( - padding: const EdgeInsets.only(bottom: 16.0), - child: BottomNavigationBar( - items: [ - ...List.generate( - 4, - (index) { - return BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: homeScreenWatch.id == index - ? AppColors.primary - : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset(homeScreenWatch - .bottomNavigationBarSvgPath[index]), - ), - label: AppStrings.keyHome, - backgroundColor: AppColors.background); - }, - ), - ], - selectedFontSize: 10.sp, - unselectedFontSize: 10.sp, - backgroundColor: AppColors.background, - currentIndex: homeScreenWatch.id, - type: BottomNavigationBarType.shifting, - showUnselectedLabels: true, - selectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.primary, fontSize: 12.sp), - selectedItemColor: AppColors.primary, - unselectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.white, fontSize: 12.sp), - onTap: (index) { - homeScreenWatch.setId(newId: index); - if (homeScreenWatch.id == 1 || homeScreenWatch.id == 3) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const GetOtp(); - }, - ), - ); - } - homeScreenWatch.id == 2 - ? Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const CardShop(); - }, - ), - ) - : Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); - }, - ), - ); - }, - ), + bottomNavigationBar: const HomeScreenBottomNavigationBar(), ); } } diff --git a/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart b/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart index 4d5171d..1fc6bd1 100644 --- a/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart +++ b/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart @@ -5,8 +5,7 @@ import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; - -import '../../../../framework/controllers/onboarding/onboarding_controller.dart'; +import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; class OnBoardingNextButton extends StatelessWidget { const OnBoardingNextButton({super.key}); diff --git a/lib/ui/onboarding/mobile/onboarding_mobile.dart b/lib/ui/onboarding/mobile/onboarding_mobile.dart index 4ae4e6b..7130eed 100644 --- a/lib/ui/onboarding/mobile/onboarding_mobile.dart +++ b/lib/ui/onboarding/mobile/onboarding_mobile.dart @@ -4,7 +4,6 @@ import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_page_indicato import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_skip_button.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class OnBoardingMobile extends StatelessWidget { @@ -14,43 +13,30 @@ class OnBoardingMobile extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - body: Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - return _bodyWidget(context); - }, - ), - ); - } - - ///Body Widget - Widget _bodyWidget(BuildContext context) { - return Padding( - padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), - child: Column( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 25.h, - ), - - ///Skip Button - const SkipButton(), - - ///space left out for animation will implement when I get json file from designer - const OnBoardingCenterWidget(), - - ///Page Indicator Boxes - const OnBoardingPageIndicator(), - ], + body: Padding( + padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), + child: Column( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 25.h, + ), + ///Skip Button + const SkipButton(), + ///space left out for animation + const OnBoardingCenterWidget(), + ///Page Indicator Boxes + const OnBoardingPageIndicator(), + ], + ), ), - ), - - ///Display Common Button on first 2 pages and Slider on 3rd page - const OnBoardingBottomButton(), - ], + ///Display Common Button on first 2 pages and Slider on 3rd page + const OnBoardingBottomButton(), + ], + ), ), ); } diff --git a/lib/ui/splashscreen/mobile/helper/splash_body.dart b/lib/ui/splashscreen/mobile/helper/splash_body.dart index e69de29..27af8e1 100644 --- a/lib/ui/splashscreen/mobile/helper/splash_body.dart +++ b/lib/ui/splashscreen/mobile/helper/splash_body.dart @@ -0,0 +1,34 @@ +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class SplashBody extends StatelessWidget { + const SplashBody({super.key}); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + AppStrings.keyCard, + style: TextStyles.bold.copyWith( + color: AppColors.primary, + fontSize: 50.sp, + ), + ), + Text( + AppStrings.keyBuyAndSell, + style: TextStyles.medium.copyWith( + color: AppColors.white, + fontSize: 16.sp, + ), + ), + ], + ), + ); + } +} diff --git a/lib/ui/splashscreen/mobile/splash_screen_mobile.dart b/lib/ui/splashscreen/mobile/splash_screen_mobile.dart index d68c820..8b5ebb7 100644 --- a/lib/ui/splashscreen/mobile/splash_screen_mobile.dart +++ b/lib/ui/splashscreen/mobile/splash_screen_mobile.dart @@ -1,8 +1,7 @@ import 'dart:async'; import 'package:cardtrading/ui/choose_language/choose_language.dart'; +import 'package:cardtrading/ui/splashscreen/mobile/helper/splash_body.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; -import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -32,34 +31,10 @@ class _SplashScreenMobileState extends ConsumerState { @override Widget build(BuildContext context) { - return Scaffold( + return const Scaffold( backgroundColor: AppColors.background, - body: _bodyWidget(), + body: SplashBody(), ); } - ///Body Widget - Widget _bodyWidget(){ - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - AppStrings.keyCard, - style: TextStyles.bold.copyWith( - color: AppColors.primary, - fontSize: 50, - ), - ), - Text( - AppStrings.keyBuyAndSell, - style: TextStyles.medium.copyWith( - color: AppColors.white, - fontSize: 16 - ), - ), - ], - ), - ); - } } diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_card.dart b/lib/ui/subscription_plan/mobile/helper/subscription_card.dart index b2fa80d..41e0ba7 100644 --- a/lib/ui/subscription_plan/mobile/helper/subscription_card.dart +++ b/lib/ui/subscription_plan/mobile/helper/subscription_card.dart @@ -60,6 +60,7 @@ class SubscriptionPlanCard extends StatelessWidget { style: TextStyles.regular.copyWith( fontFamily: 'Sora', fontSize: 12.sp, + overflow: TextOverflow.ellipsis, color: AppColors.greyText, ), ), @@ -70,6 +71,7 @@ class SubscriptionPlanCard extends StatelessWidget { planBenefits, style: TextStyles.extraLight.copyWith( fontSize: 10.sp, + overflow: TextOverflow.ellipsis, fontFamily: 'Sora', color: AppColors.greyText, ), @@ -83,6 +85,7 @@ class SubscriptionPlanCard extends StatelessWidget { fontSize: 10, fontFamily: 'Sora', color: AppColors.primary, + overflow: TextOverflow.ellipsis, ), ), const Divider( @@ -96,6 +99,7 @@ class SubscriptionPlanCard extends StatelessWidget { planKd, style: TextStyles.bold.copyWith( fontFamily: 'Sora', + overflow: TextOverflow.ellipsis, fontSize: 26.sp, color: borderColor, ), @@ -116,6 +120,7 @@ class SubscriptionPlanCard extends StatelessWidget { ), Text( subscriptionPlanOne, + overflow: TextOverflow.ellipsis, style: TextStyles.light.copyWith( fontSize: 12.sp, fontFamily: 'Sora', @@ -142,6 +147,7 @@ class SubscriptionPlanCard extends StatelessWidget { subscriptionPlanTwo, style: TextStyles.light.copyWith( fontSize: 12.sp, + overflow: TextOverflow.ellipsis, fontFamily: 'Sora', color: AppColors.containerText, ), @@ -190,18 +196,18 @@ class SubscriptionPlanCard extends StatelessWidget { ), child: Row( mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( AppStrings.keyBuyNow, style: TextStyles.semiBold.copyWith( fontFamily: 'Sora', fontSize: 14.sp, + overflow: TextOverflow.ellipsis, color: AppColors.dividerColor, ), ), Padding( - padding: const EdgeInsets.all(8.0), + padding: EdgeInsets.all(8.0.w), child: SvgPicture.asset( '${AppAssets.svgLocation}arrow.svg', width: 14.w, diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart b/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart index e69de29..db8f8bc 100644 --- a/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart +++ b/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart @@ -0,0 +1,139 @@ + +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_title.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class SubscriptionPlanBody extends StatelessWidget { + const SubscriptionPlanBody({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + padding: const EdgeInsets.all(20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// + CommonTitle( + text: AppStrings.keyChooseYourPlan, + tStyle: TextStyles.regular + .copyWith(fontFamily: 'Sora', color: AppColors.golden), + align: TextAlign.start, + ), + SizedBox( + height: 10.h, + ), + Text( + AppStrings.keyTermsAndConditionDescription, + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + fontSize: 12.sp, + overflow: TextOverflow.ellipsis + ), + ), + SizedBox( + height: 20.h, + ), + SubscriptionPlanCard( + subscriptionPlan: AppStrings.keyEliteSubscriptionPlan, + planBenefits: AppStrings.keyElitePlanBenefits, + url: '${AppAssets.svgLocation}golden.svg', + borderColor: AppColors.cardGolden, + planKd: AppStrings.keyEliteKd, + subscriptionPlanOne: AppStrings.keyEliteConditionOne, + subscriptionPlanTwo: AppStrings.keyEliteConditionTwo, + subscriptionPlanThree: AppStrings.keyEliteConditionThree, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return SubscriptionPlanScreen( + url: '${AppAssets.svgLocation}golden.svg', + cardLimitOne: AppStrings.keyEliteCardDetailsOne, + cardLimitTwo: AppStrings.keyEliteCardDetailsTwo, + cardLimitThree: AppStrings.keyEliteCardDetailsThree, + rewardPointOne: AppStrings.keyEliteRewardsPointsOne, + rewardPointTwo: AppStrings.keyEliteRewardsPointsTwo, + rewardPointThree: AppStrings.keyEliteRewardsPointsThree, + verifiedBadgeOne: AppStrings.keyEliteVerifiedBadgeOne, + verifiedBadgeTwo: AppStrings.keyEliteVerifiedBadgeTwo, + ); + }, + ), + ); + }, + ), + SizedBox( + height: 20.h, + ), + SubscriptionPlanCard( + subscriptionPlan: AppStrings.keyBasicSubscriptionPlan, + planBenefits: AppStrings.keyBasicPlanBenefits, + url: '${AppAssets.svgLocation}silver.svg', + borderColor: AppColors.cardSilver, + planKd: AppStrings.keyBasicKd, + subscriptionPlanOne: AppStrings.keyBasicConditionOne, + subscriptionPlanTwo: AppStrings.keyBasicConditionTwo, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return SubscriptionPlanScreen( + url: '${AppAssets.svgLocation}silver.svg', + cardLimitOne: AppStrings.keyBasicCardDetailsOne, + cardLimitTwo: AppStrings.keyBasicCardDetailsTwo, + cardLimitThree: AppStrings.keyBasicCardDetailsThree, + rewardPointOne: AppStrings.keyBasicRewardsPointsOne, + rewardPointTwo: AppStrings.keyBasicRewardsPointsTwo, + rewardPointThree: AppStrings.keyBasicRewardsPointsThree, + ); + }, + ), + ); + }, + ), + SizedBox( + height: 20.h, + ), + SubscriptionPlanCard( + subscriptionPlan: AppStrings.keyPremiumSubscriptionPlan, + planBenefits: AppStrings.keyPremiumPlanBenefits, + url: '${AppAssets.svgLocation}bronze.svg', + borderColor: AppColors.cardBronze, + planKd: AppStrings.keyPremiumKd, + subscriptionPlanOne: AppStrings.keyPremiumConditionOne, + subscriptionPlanTwo: AppStrings.keyPremiumConditionTwo, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return SubscriptionPlanScreen( + url: '${AppAssets.svgLocation}bronze.svg', + cardLimitOne: AppStrings.keyPremiumCardDetailsOne, + cardLimitTwo: AppStrings.keyPremiumCardDetailsTwo, + cardLimitThree: AppStrings.keyPremiumCardDetailsThree, + rewardPointOne: AppStrings.keyPremiumRewardsPointsOne, + rewardPointTwo: AppStrings.keyPremiumRewardsPointsTwo, + rewardPointThree: AppStrings.keyPremiumRewardsPointsThree, + ); + }, + ), + ); + }, + ), + ], + ), + ); + } +} diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart b/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart index abf54dc..1d74701 100644 --- a/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart +++ b/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart @@ -2,6 +2,7 @@ import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -34,7 +35,7 @@ class SubscriptionPlanScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( + appBar: CommonAppBar( backgroundColor: AppColors.background, leading: IconButton( onPressed: () { @@ -44,20 +45,19 @@ class SubscriptionPlanScreen extends StatelessWidget { Icons.arrow_back_outlined, ), ), - title: Text( + titleWidget: Text( AppStrings.keyTermsAndCondition, style: TextStyles.bold.copyWith( fontSize: 16.sp, color: AppColors.white, ), ), - centerTitle: true, + isTitleCentered: true, ), body: Padding( - padding: const EdgeInsets.all(20), + padding: EdgeInsets.all(20.0.w), child: SingleChildScrollView( child: Column( - mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ SvgPicture.asset( @@ -72,6 +72,7 @@ class SubscriptionPlanScreen extends StatelessWidget { AppStrings.keyCardLimit, style: TextStyles.medium.copyWith( color: AppColors.white, + overflow: TextOverflow.ellipsis, ), ), SizedBox( @@ -152,12 +153,26 @@ class SubscriptionPlanScreen extends StatelessWidget { } Widget _text(String text) { + return SubscriptionPlanText(starSvgPath: starSvgPath,text: text,); + } +} + +class SubscriptionPlanText extends StatelessWidget { + const SubscriptionPlanText({ + super.key, + required this.starSvgPath, required this.text, + }); + + final String starSvgPath; + final String text; + + @override + Widget build(BuildContext context) { return Row( - mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.symmetric(vertical: 4.0), + padding: EdgeInsets.symmetric(vertical: 4.0.h), child: SvgPicture.asset( starSvgPath, width: 10.w, @@ -175,6 +190,7 @@ class SubscriptionPlanScreen extends StatelessWidget { style: TextStyles.light.copyWith( fontSize: 12.sp, color: AppColors.greyText, + overflow: TextOverflow.ellipsis, ), ), ), diff --git a/lib/ui/subscription_plan/mobile/subscription_mobile.dart b/lib/ui/subscription_plan/mobile/subscription_mobile.dart index ad0504a..6de464b 100644 --- a/lib/ui/subscription_plan/mobile/subscription_mobile.dart +++ b/lib/ui/subscription_plan/mobile/subscription_mobile.dart @@ -1,43 +1,40 @@ import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; -import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; -import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_plan_body.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_title.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class SubscriptionMobile extends ConsumerStatefulWidget { +class SubscriptionMobile extends StatelessWidget { const SubscriptionMobile({super.key}); - @override - ConsumerState createState() => - _SubscriptionMobileState(); -} - - -class _SubscriptionMobileState extends ConsumerState { - final GlobalKey _globalKey = GlobalKey(); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - key: _globalKey, - appBar: AppBar( - elevation: 0, + + appBar: CommonAppBar( + backgroundColor: AppColors.background, leading: IconButton( icon: SvgPicture.asset('${AppAssets.svgLocation}menu.svg'), onPressed: () { - _globalKey.currentState!.openDrawer(); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreenDrawer(); + }, + ), + ); }, ), - title: Text( + titleWidget: Text( AppStrings.keySubscriptionPlan, style: TextStyles.regular.copyWith( fontSize: 16.sp, @@ -45,127 +42,10 @@ class _SubscriptionMobileState extends ConsumerState { color: AppColors.white, ), ), - centerTitle: true, + isTitleCentered: true, ), drawer: const HomeScreenDrawer(), - body: SingleChildScrollView( - padding: const EdgeInsets.all(20.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - /// - CommonTitle( - text: AppStrings.keyChooseYourPlan, - tStyle: TextStyles.regular - .copyWith(fontFamily: 'Sora', color: AppColors.golden), - align: TextAlign.start, - ), - SizedBox( - height: 10.h, - ), - Text( - AppStrings.keyTermsAndConditionDescription, - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - fontSize: 12.sp, - ), - ), - SizedBox( - height: 20.h, - ), - SubscriptionPlanCard( - subscriptionPlan: AppStrings.keyEliteSubscriptionPlan, - planBenefits: AppStrings.keyElitePlanBenefits, - url: '${AppAssets.svgLocation}golden.svg', - borderColor: AppColors.cardGolden, - planKd: AppStrings.keyEliteKd, - subscriptionPlanOne: AppStrings.keyEliteConditionOne, - subscriptionPlanTwo: AppStrings.keyEliteConditionTwo, - subscriptionPlanThree: AppStrings.keyEliteConditionThree, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return SubscriptionPlanScreen( - url: '${AppAssets.svgLocation}golden.svg', - cardLimitOne: AppStrings.keyEliteCardDetailsOne, - cardLimitTwo: AppStrings.keyEliteCardDetailsTwo, - cardLimitThree: AppStrings.keyEliteCardDetailsThree, - rewardPointOne: AppStrings.keyEliteRewardsPointsOne, - rewardPointTwo: AppStrings.keyEliteRewardsPointsTwo, - rewardPointThree: AppStrings.keyEliteRewardsPointsThree, - verifiedBadgeOne: AppStrings.keyEliteVerifiedBadgeOne, - verifiedBadgeTwo: AppStrings.keyEliteVerifiedBadgeTwo, - ); - }, - ), - ); - }, - ), - SizedBox( - height: 20.h, - ), - SubscriptionPlanCard( - subscriptionPlan: AppStrings.keyBasicSubscriptionPlan, - planBenefits: AppStrings.keyBasicPlanBenefits, - url: '${AppAssets.svgLocation}silver.svg', - borderColor: AppColors.cardSilver, - planKd: AppStrings.keyBasicKd, - subscriptionPlanOne: AppStrings.keyBasicConditionOne, - subscriptionPlanTwo: AppStrings.keyBasicConditionTwo, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return SubscriptionPlanScreen( - url: '${AppAssets.svgLocation}silver.svg', - cardLimitOne: AppStrings.keyBasicCardDetailsOne, - cardLimitTwo: AppStrings.keyBasicCardDetailsTwo, - cardLimitThree: AppStrings.keyBasicCardDetailsThree, - rewardPointOne: AppStrings.keyBasicRewardsPointsOne, - rewardPointTwo: AppStrings.keyBasicRewardsPointsTwo, - rewardPointThree: AppStrings.keyBasicRewardsPointsThree, - ); - }, - ), - ); - }, - ), - SizedBox( - height: 20.h, - ), - SubscriptionPlanCard( - subscriptionPlan: AppStrings.keyPremiumSubscriptionPlan, - planBenefits: AppStrings.keyPremiumPlanBenefits, - url: '${AppAssets.svgLocation}bronze.svg', - borderColor: AppColors.cardBronze, - planKd: AppStrings.keyPremiumKd, - subscriptionPlanOne: AppStrings.keyPremiumConditionOne, - subscriptionPlanTwo: AppStrings.keyPremiumConditionTwo, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return SubscriptionPlanScreen( - url: '${AppAssets.svgLocation}bronze.svg', - cardLimitOne: AppStrings.keyPremiumCardDetailsOne, - cardLimitTwo: AppStrings.keyPremiumCardDetailsTwo, - cardLimitThree: AppStrings.keyPremiumCardDetailsThree, - rewardPointOne: AppStrings.keyPremiumRewardsPointsOne, - rewardPointTwo: AppStrings.keyPremiumRewardsPointsTwo, - rewardPointThree: AppStrings.keyPremiumRewardsPointsThree, - ); - }, - ), - ); - }, - ), - ], - ), - ), + body: const SubscriptionPlanBody(), ); } } diff --git a/lib/ui/utils/theme/my_strings.dart b/lib/ui/utils/theme/my_strings.dart index 5c098f3..c9ad19c 100644 --- a/lib/ui/utils/theme/my_strings.dart +++ b/lib/ui/utils/theme/my_strings.dart @@ -106,6 +106,7 @@ class AppStrings { static const keyBasicPlanBenefits = 'Access To Essential Features For Trading Cards.'; static const keyCompleteYourProfile = 'Complete Your Profile'; + static const keyAddAddress = 'Add Address'; static const keyCompleteYourProfileContent = 'Please Enter Your Personal Detail By That Verify Your Date And Move Further.'; static const keyEnterYourPersonalDetails = 'Enter Your Personal Details Here'; diff --git a/lib/ui/utils/widget/common_appbar.dart b/lib/ui/utils/widget/common_appbar.dart index e69de29..bea0118 100644 --- a/lib/ui/utils/widget/common_appbar.dart +++ b/lib/ui/utils/widget/common_appbar.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; + +///Common Appbar for Card Trading Application +class CommonAppBar extends StatelessWidget implements PreferredSizeWidget { + const CommonAppBar({ + super.key, + this.isLeadingEnable, + this.isDrawerEnable, + this.onLeadingPress, + this.title, + this.titleWidget, + this.actions, + this.backgroundColor, + this.titleStyle, + this.leading, + this.isTitleCentered, + }); + + final bool? isLeadingEnable; + final bool? isDrawerEnable; + final bool? isTitleCentered; + final Function()? onLeadingPress; + final String? title; + final Widget? titleWidget; + final Widget? leading; + final List? actions; + final Color? backgroundColor; + final TextStyle? titleStyle; + + @override + Widget build(BuildContext context) { + return AppBar( + backgroundColor: backgroundColor, + elevation: 0, + automaticallyImplyLeading: isLeadingEnable ?? false, + centerTitle: isTitleCentered, + leading: InkWell( + onTap: onLeadingPress, + child: leading, + ), + title: titleWidget ?? + Text( + title ?? '', + style: titleStyle, + ), + ); + } + + @override + Size get preferredSize => Size.fromHeight(AppBar().preferredSize.height); +} diff --git a/lib/ui/utils/widget/common_button.dart b/lib/ui/utils/widget/common_button.dart index 80426fb..0994676 100644 --- a/lib/ui/utils/widget/common_button.dart +++ b/lib/ui/utils/widget/common_button.dart @@ -62,6 +62,7 @@ class CommonButton extends StatelessWidget { TextStyles.semiBold.copyWith( fontSize: buttonFontSize ?? 16.sp, color: AppColors.selectedButtonText, + overflow: TextOverflow.ellipsis ), ), ), diff --git a/lib/ui/utils/widget/common_paragraph.dart b/lib/ui/utils/widget/common_paragraph.dart index 0eb87b9..9103e04 100644 --- a/lib/ui/utils/widget/common_paragraph.dart +++ b/lib/ui/utils/widget/common_paragraph.dart @@ -10,7 +10,7 @@ class CommonParagraph extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), + padding: EdgeInsets.symmetric(horizontal: 20.0.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -27,6 +27,7 @@ class CommonParagraph extends StatelessWidget { Text( AppStrings.keyCommonParagraphContent, softWrap: true, + overflow: TextOverflow.ellipsis, style: TextStyles.light.copyWith( fontSize: 12.sp, fontFamily: 'Sora', diff --git a/lib/ui/utils/widget/common_title.dart b/lib/ui/utils/widget/common_title.dart index 2b7f8c2..a70283b 100644 --- a/lib/ui/utils/widget/common_title.dart +++ b/lib/ui/utils/widget/common_title.dart @@ -17,6 +17,7 @@ class CommonTitle extends StatelessWidget { text, textAlign: align, maxLines: 3, + overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: TextStyles.fontFamily, fontSize: fontSize.sp, diff --git a/lib/ui/utils/widget/shop_card.dart b/lib/ui/utils/widget/shop_card.dart index 53eb5ee..d78c2b9 100644 --- a/lib/ui/utils/widget/shop_card.dart +++ b/lib/ui/utils/widget/shop_card.dart @@ -8,29 +8,23 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -class ShopCard extends ConsumerStatefulWidget { +class ShopCard extends StatelessWidget { const ShopCard({super.key, required this.index, this.onTap}); final int index; final void Function()? onTap; - @override - ConsumerState createState() => _ShopCardState(); -} - -class _ShopCardState extends ConsumerState { @override Widget build(BuildContext context) { return InkWell( - onTap: widget.onTap ?? + onTap: onTap ?? () { Navigator.push( context, MaterialPageRoute( builder: (context) { return CardDetails( - url: - '${AppAssets.imgLocation}card_${widget.index % 4}.png'); + url: '${AppAssets.imgLocation}card_${index % 4}.png'); }, ), ); @@ -57,22 +51,26 @@ class _ShopCardState extends ConsumerState { .copyWith(color: Colors.black, fontSize: 12.sp), ), ), - IconButton( - iconSize: 24, - padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), - onPressed: () { - ref.watch(shopCardController).favourite(); - }, - icon: Icon( - ref.watch(shopCardController).isFavourite - ? Icons.favorite - : Icons.favorite_border, - color: AppColors.primary, - ), - ), + Consumer(builder: + (BuildContext context, WidgetRef ref, Widget? widget) { + return IconButton( + iconSize: 24, + padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), + onPressed: () { + ref.watch(shopCardController).favourite(); + }, + icon: Icon( + ref.watch(shopCardController).isFavourite + ? Icons.favorite + : Icons.favorite_border, + color: AppColors.primary, + ), + ); + }), Text( AppStrings.keyCardLikesCount, style: TextStyles.regular, + overflow: TextOverflow.fade, ), ], ), @@ -81,7 +79,7 @@ class _ShopCardState extends ConsumerState { ), Expanded( child: Image.asset( - '${AppAssets.imgLocation}card_${widget.index % 4}.png', + '${AppAssets.imgLocation}card_${index % 4}.png', width: 100.w, height: 150.h, fit: BoxFit.contain, @@ -98,13 +96,17 @@ class _ShopCardState extends ConsumerState { overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, - style: TextStyles.regular.copyWith(fontSize: 12.sp), + style: TextStyles.regular + .copyWith(fontSize: 12.sp, overflow: TextOverflow.ellipsis), ), ), Text( AppStrings.keyCardPrice, textAlign: TextAlign.center, - style: TextStyles.semiBold.copyWith(color: AppColors.primary), + style: TextStyles.semiBold.copyWith( + color: AppColors.primary, + overflow: TextOverflow.ellipsis, + ), ), SizedBox( height: 8.h, From 7d260db3b946f5ad18a2587f1c785972b096cf9c Mon Sep 17 00:00:00 2001 From: uveshmenpur Date: Wed, 19 Jul 2023 12:10:43 +0530 Subject: [PATCH 6/8] Bug Fixing --- .../authentication/get_otp_controller.dart | 5 +- .../card_shop/card_shop_controller.dart | 1 + .../complete_profile_controller.dart | 17 +- .../mobile/helper/about_us_screen.dart | 43 ++- .../authentication/mobile/get_otp_mobile.dart | 214 +------------- .../mobile/helper/get_otp_body_widget.dart | 127 +++++++++ .../mobile/helper/get_otp_button.dart | 50 ++++ .../mobile/helper/get_otp_text_field.dart | 52 ++++ .../mobile/helper/sign_in_body.dart | 70 +++++ .../mobile/helper/sign_in_button.dart | 51 ++++ .../mobile/helper/sign_in_text_field.dart | 6 +- .../authentication/mobile/sign_in_mobile.dart | 100 +------ .../mobile/card_details_mobile.dart | 156 +---------- .../mobile/helper/add_to_card_button.dart | 48 ++++ .../mobile/helper/card_description.dart | 78 ++++++ .../helper/card_details_bottom_content.dart | 63 +++++ lib/ui/card_shop/mobile/card_shop_mobile.dart | 265 ++---------------- .../mobile/helper/card_shop_grid.dart} | 20 +- .../mobile/helper/card_shop_search_bar.dart | 55 ++++ .../mobile/helper/card_shop_tab_bar.dart | 88 ++++++ .../mobile/choose_language_mobile.dart | 14 +- .../mobile/complete_profile_mobile.dart | 48 ++-- .../mobile/helper/add_address_header.dart | 51 ++++ .../mobile/helper/add_address_screen.dart | 129 +-------- .../mobile/helper/address_type_field.dart | 64 +++++ .../mobile/helper/sign_up_button.dart | 56 ++++ .../mobile/featured_seller_mobile.dart | 59 +++- .../mobile/helper/featured_seller_body.dart | 56 ---- .../helper/home_screen_app_bar_actions.dart | 48 ---- .../mobile/helper/home_screen_banner.dart | 44 ++- .../home_screen_bottom_navigation_bar.dart | 48 ++-- .../helper/home_screen_description.dart | 15 +- .../mobile/helper/home_screen_divider.dart | 7 +- .../mobile/helper/home_screen_drawer.dart | 53 ++-- .../helper/home_screen_drawer_body.dart | 15 +- .../home_screen_featured_collection_list.dart | 46 ++- .../mobile/helper/home_screen_profiles.dart | 75 +++-- .../mobile/home_screen_mobile.dart | 81 ++++-- .../mobile/helper/onboarding_next_button.dart | 3 +- .../onboarding/mobile/onboarding_mobile.dart | 60 ++-- .../mobile/helper/splash_body.dart | 10 +- .../helper/basic_subscription_card.dart | 43 +++ .../helper/elite_subscription_card.dart | 46 +++ .../helper/premium_subscription_card.dart | 44 +++ .../mobile/helper/subscription_body.dart | 56 ++++ .../mobile/helper/subscription_card.dart | 10 +- .../mobile/helper/subscription_plan_body.dart | 139 --------- .../mobile/helper/subscription_screen.dart | 30 +- .../mobile/subscription_mobile.dart | 9 +- lib/ui/utils/theme/my_strings.dart | 2 +- lib/ui/utils/widget/common_button.dart | 1 - lib/ui/utils/widget/common_paragraph.dart | 3 +- lib/ui/utils/widget/common_title.dart | 1 - lib/ui/utils/widget/shop_card.dart | 45 ++- 54 files changed, 1503 insertions(+), 1417 deletions(-) create mode 100644 lib/ui/authentication/mobile/helper/get_otp_body_widget.dart create mode 100644 lib/ui/authentication/mobile/helper/get_otp_button.dart create mode 100644 lib/ui/authentication/mobile/helper/get_otp_text_field.dart create mode 100644 lib/ui/authentication/mobile/helper/sign_in_body.dart create mode 100644 lib/ui/authentication/mobile/helper/sign_in_button.dart create mode 100644 lib/ui/card_details/mobile/helper/add_to_card_button.dart create mode 100644 lib/ui/card_details/mobile/helper/card_description.dart create mode 100644 lib/ui/card_details/mobile/helper/card_details_bottom_content.dart rename lib/ui/{home_screen/mobile/helper/home_screen_card_grid.dart => card_shop/mobile/helper/card_shop_grid.dart} (61%) create mode 100644 lib/ui/card_shop/mobile/helper/card_shop_search_bar.dart create mode 100644 lib/ui/card_shop/mobile/helper/card_shop_tab_bar.dart create mode 100644 lib/ui/complete_your_profile/mobile/helper/add_address_header.dart create mode 100644 lib/ui/complete_your_profile/mobile/helper/address_type_field.dart create mode 100644 lib/ui/complete_your_profile/mobile/helper/sign_up_button.dart delete mode 100644 lib/ui/featured_seller/mobile/helper/featured_seller_body.dart delete mode 100644 lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart create mode 100644 lib/ui/subscription_plan/mobile/helper/basic_subscription_card.dart create mode 100644 lib/ui/subscription_plan/mobile/helper/elite_subscription_card.dart create mode 100644 lib/ui/subscription_plan/mobile/helper/premium_subscription_card.dart create mode 100644 lib/ui/subscription_plan/mobile/helper/subscription_body.dart delete mode 100644 lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart diff --git a/lib/framework/controllers/authentication/get_otp_controller.dart b/lib/framework/controllers/authentication/get_otp_controller.dart index 05d02d6..67569df 100644 --- a/lib/framework/controllers/authentication/get_otp_controller.dart +++ b/lib/framework/controllers/authentication/get_otp_controller.dart @@ -8,7 +8,7 @@ final getOtpController = ChangeNotifierProvider( }, ); -class GetOtpController extends ChangeNotifier{ +class GetOtpController extends ChangeNotifier { int countDown = 59; late Timer timer; @@ -16,9 +16,6 @@ class GetOtpController extends ChangeNotifier{ countDown = count; notifyListeners(); } - - - void decrement(){ countDown--; notifyListeners(); diff --git a/lib/framework/controllers/card_shop/card_shop_controller.dart b/lib/framework/controllers/card_shop/card_shop_controller.dart index 2e8f9a1..d67188f 100644 --- a/lib/framework/controllers/card_shop/card_shop_controller.dart +++ b/lib/framework/controllers/card_shop/card_shop_controller.dart @@ -9,5 +9,6 @@ class CardShopController extends ChangeNotifier{ int pageIndex = 0; void setOrIncrementPageIndex({int? index}){ pageIndex = index ?? pageIndex + 1; + notifyListeners(); } } \ No newline at end of file diff --git a/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart b/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart index 7e44d5d..4f84aae 100644 --- a/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart +++ b/lib/framework/controllers/complete_your_profile/complete_profile_controller.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final completeProfileController = - ChangeNotifierProvider((ref) => CompleteProfileController()); +ChangeNotifierProvider((ref) => CompleteProfileController()); class CompleteProfileController extends ChangeNotifier { bool hasReferral = false; @@ -29,8 +29,8 @@ class CompleteProfileController extends ChangeNotifier { String? area, block, street; int id = 0; List areas = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List blocks = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; - List streets = ['Isckon', 'Thaltej', 'NehruNagar', 'Bodakdev']; + List blocks = ['Block 1', 'Block 2', 'Block 3', 'Block 4']; + List streets = ['Street 1', 'Street 2', 'Street 3', 'Street 4']; List addressTypes = [ AppStrings.keyAddressTypeOne, AppStrings.keyAddressTypeTwo, @@ -44,12 +44,12 @@ class CompleteProfileController extends ChangeNotifier { } void setBlock(String? value) { - area = value; + block = value; notifyListeners(); } void setStreet(String? value) { - area = value; + street = value; notifyListeners(); } @@ -77,12 +77,7 @@ class CompleteProfileController extends ChangeNotifier { page++; notifyListeners(); } - String? validateDropDowns(String? value,int index){ - if((areas.contains(value) && index == 0) || (blocks.contains(value) && index == 1) || (streets.contains(value) && index == 3)){ - return 'Enter Valid Value'; - } - return null; - } + void resetPage(){ pageController.jumpToPage(0); diff --git a/lib/ui/about_us/mobile/helper/about_us_screen.dart b/lib/ui/about_us/mobile/helper/about_us_screen.dart index b52dd14..92e8a0b 100644 --- a/lib/ui/about_us/mobile/helper/about_us_screen.dart +++ b/lib/ui/about_us/mobile/helper/about_us_screen.dart @@ -2,6 +2,7 @@ import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:cardtrading/ui/utils/widget/common_paragraph.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -16,10 +17,8 @@ class AboutUsScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( - elevation: 0, + appBar: CommonAppBar( backgroundColor: AppColors.background, - ///Opens Drawer leading: IconButton( icon: SvgPicture.asset('${AppAssets.svgLocation}menu.svg'), onPressed: () { @@ -33,34 +32,32 @@ class AboutUsScreen extends StatelessWidget { ); }, ), - title: Text( + titleWidget: Text( title, style: TextStyles.bold.copyWith( fontSize: 16.sp, color: AppColors.white, ), ), - centerTitle: true, + isTitleCentered: true, ), - body: SingleChildScrollView( - child: Column( - children: [ - SizedBox( - height: 10.0.h, - ), - ///Common Paragraph - const CommonParagraph(), - Padding( - padding: EdgeInsets.symmetric(horizontal: 20.0.w, vertical: 8.0.h), - child: const Divider( - thickness: 1.0, - color: AppColors.indicatorColor, - ), + body: const Column( + children: [ + SizedBox( + height: 10.0, + ), + ///Common Paragraph + CommonParagraph(), + Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 8.0), + child: Divider( + thickness: 1.0, + color: AppColors.indicatorColor, ), - ///Common Paragraph - const CommonParagraph(), - ], - ), + ), + ///Common Paragraph + CommonParagraph(), + ], ), ); } diff --git a/lib/ui/authentication/mobile/get_otp_mobile.dart b/lib/ui/authentication/mobile/get_otp_mobile.dart index 765aa9a..d6504d1 100644 --- a/lib/ui/authentication/mobile/get_otp_mobile.dart +++ b/lib/ui/authentication/mobile/get_otp_mobile.dart @@ -1,18 +1,16 @@ import 'package:cardtrading/framework/controllers/authentication/get_otp_controller.dart'; -import 'package:cardtrading/ui/complete_your_profile/complete_profile.dart'; +import 'package:cardtrading/ui/authentication/mobile/helper/get_otp_body_widget.dart'; import 'package:cardtrading/ui/onboarding/onboarding.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; -import 'package:cardtrading/ui/utils/widget/common_title.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:pin_code_fields/pin_code_fields.dart'; class GetOtpMobile extends ConsumerStatefulWidget { const GetOtpMobile({super.key}); @@ -21,7 +19,8 @@ class GetOtpMobile extends ConsumerStatefulWidget { ConsumerState createState() => _GetOtpMobileState(); } -class _GetOtpMobileState extends ConsumerState{ +class _GetOtpMobileState extends ConsumerState { + final _formKey = GlobalKey(); @override @@ -35,11 +34,10 @@ class _GetOtpMobileState extends ConsumerState{ @override Widget build(BuildContext context) { - return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( - title: Text( + appBar: CommonAppBar( + titleWidget: Text( AppStrings.keyVerification, style: TextStyles.medium.copyWith( fontSize: 16.sp, @@ -63,206 +61,10 @@ class _GetOtpMobileState extends ConsumerState{ height: 24.h, ), ), - centerTitle: true, - elevation: 0, + isTitleCentered: true, backgroundColor: AppColors.background, ), - body: _bodyWidget(context), - ); - } - - ///Body Widget - Widget _bodyWidget(BuildContext context) { - return Form( - key: _formKey, - child: Column( - children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - padding: const EdgeInsets.all(4.0), - width: 0.5.sw, - child: CommonTitle( - text: AppStrings.keyEnterOtpHere, - tStyle: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, - ), - ), - ), - Container( - padding: const EdgeInsets.all(4.0), - width: 0.8.sw, - child: Text( - AppStrings.keyWeHaveSentYouOtp, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - ), - Padding( - padding: const EdgeInsets.fromLTRB(8.0, 20.0, 8.0, 8.0), - - ///Pin Code Text Fields - child: _pinCodeTextField(context), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - AppStrings.keyCodeNotReceived, - style: TextStyles.light.copyWith( - fontFamily: 'Sora', - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - Consumer( - builder: (BuildContext context, WidgetRef ref, - Widget? child) { - final getOtpWatch = ref.watch(getOtpController); - return InkWell( - onTap: () { - getOtpWatch.changeCount(60); - getOtpWatch.startTimer(); - }, - child: Visibility( - visible: getOtpWatch.countDown == 0, - child: Text( - AppStrings.keyResend, - style: TextStyles.semiBold.copyWith( - fontSize: 12.sp, - color: AppColors.primary, - fontFamily: 'Sora'), - ), - ), - ); - }, - ), - Consumer( - builder: (BuildContext context, WidgetRef ref, - Widget? child) { - final getOtpRead = ref.watch(getOtpController); - return Expanded( - child: Text( - getOtpRead.countDown.toString().length >= 2 - ? getOtpRead.countDown - .toString() - .padLeft(3, '00:') - : getOtpRead.countDown - .toString() - .padLeft(2, '00:0'), - textAlign: TextAlign.end, - ), - ); - }, - ), - ], - ), - ), - ], - ), - ), - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 24.h), - child: _commonButton(context), - ), - ], - ), - ); - } - - ///Pin code Text Fields - Widget _pinCodeTextField(BuildContext context) { - return PinCodeTextField( - validator: (value) { - try { - if (value?.length != 6) { - return 'Enter Valid OTP'; - } else { - return null; - } - } catch (e) { - if (value?.length != 6) { - return 'Enter Valid OTP'; - } else { - return 'Enter Valid OTP'; - } - } - }, - length: 6, - obscureText: false, - keyboardType: TextInputType.number, - animationType: AnimationType.scale, - hintCharacter: ' ', - cursorColor: AppColors.primary, - cursorHeight: 20.h, - textStyle: TextStyles.light.copyWith( - fontSize: 15.sp, - color: AppColors.white, - fontFamily: 'Sora', - ), - pinTheme: PinTheme( - activeColor: AppColors.buttonBg, - inactiveFillColor: AppColors.buttonBg, - activeFillColor: AppColors.buttonBg, - selectedColor: AppColors.buttonBg, - selectedFillColor: AppColors.buttonBg, - inactiveColor: AppColors.buttonBg, - fieldHeight: 42.w, - fieldWidth: 42.w, - ), - enableActiveFill: true, - onCompleted: (v) {}, - onChanged: (value) {}, - beforeTextPaste: (text) { - return true; - }, - appContext: context, - ); - } - - ///Common Button - Widget _commonButton(BuildContext context) { - return CommonButton( - buttonPadding: const EdgeInsets.all(8.0), - prefixWidget: Text( - AppStrings.keyVerifyOtp, - style: TextStyles.semiBold.copyWith( - color: AppColors.selectedButtonText, - fontSize: 16.sp, - ), - ), - buttonText: ' ', - suffixWidget: const Icon( - Icons.arrow_forward_outlined, - color: AppColors.selectedButtonText, - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const CompleteProfile(); - }, - ), - ); - } else { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Enter Valid OTP')), - ); - } - }, + body: GetOtpBodyWidget(formKey: _formKey), ); } } - diff --git a/lib/ui/authentication/mobile/helper/get_otp_body_widget.dart b/lib/ui/authentication/mobile/helper/get_otp_body_widget.dart new file mode 100644 index 0000000..6585f20 --- /dev/null +++ b/lib/ui/authentication/mobile/helper/get_otp_body_widget.dart @@ -0,0 +1,127 @@ +import 'package:cardtrading/framework/controllers/authentication/get_otp_controller.dart'; +import 'package:cardtrading/ui/authentication/mobile/helper/get_otp_button.dart'; +import 'package:cardtrading/ui/authentication/mobile/helper/get_otp_text_field.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_title.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +class GetOtpBodyWidget extends StatelessWidget { + const GetOtpBodyWidget({ + super.key, + required this.formKey, + }); + + final GlobalKey formKey; + + @override + Widget build(BuildContext context) { + return Form( + key: formKey, + child: Column( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.all(4.0), + width: 0.5.sw, + child: CommonTitle( + text: AppStrings.keyEnterOtpHere, + tStyle: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + ), + ), + ), + Container( + padding: const EdgeInsets.all(4.0), + width: 0.8.sw, + child: Text( + AppStrings.keyWeHaveSentYouOtp, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ), + Padding( + padding: EdgeInsets.fromLTRB(8.0.w, 20.0.h, 8.0.w, 8.0.h), + + ///Pin Code Text Fields + child: const GetOtpTextField(), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 8.0.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + AppStrings.keyCodeNotReceived, + style: TextStyles.light.copyWith( + fontFamily: 'Sora', + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + Consumer( + builder: (BuildContext context, WidgetRef ref, + Widget? child) { + final getOtpWatch = ref.watch(getOtpController); + return InkWell( + onTap: () { + getOtpWatch.changeCount(60); + getOtpWatch.startTimer(); + }, + child: Visibility( + visible: getOtpWatch.countDown == 0, + child: Text( + AppStrings.keyResend, + style: TextStyles.semiBold.copyWith( + fontSize: 12.sp, + color: AppColors.primary, + fontFamily: 'Sora'), + ), + ), + ); + }, + ), + Consumer( + builder: (BuildContext context, WidgetRef ref, + Widget? child) { + final getOtpRead = ref.watch(getOtpController); + return Expanded( + child: Text( + getOtpRead.countDown.toString().length >= 2 + ? getOtpRead.countDown + .toString() + .padLeft(3, '00:') + : getOtpRead.countDown + .toString() + .padLeft(2, '00:0'), + textAlign: TextAlign.end, + ), + ); + }, + ), + ], + ), + ), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 24.h), + child: GetOtpButton(formKey: formKey), + ), + ], + ), + ); + } +} diff --git a/lib/ui/authentication/mobile/helper/get_otp_button.dart b/lib/ui/authentication/mobile/helper/get_otp_button.dart new file mode 100644 index 0000000..28f593a --- /dev/null +++ b/lib/ui/authentication/mobile/helper/get_otp_button.dart @@ -0,0 +1,50 @@ +import 'package:cardtrading/ui/complete_your_profile/complete_profile.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +class GetOtpButton extends StatelessWidget { + const GetOtpButton({ + super.key, + required this.formKey, + }); + + final GlobalKey formKey; + + @override + Widget build(BuildContext context) { + return CommonButton( + buttonPadding: const EdgeInsets.all(8.0), + prefixWidget: Text( + AppStrings.keyVerifyOtp, + style: TextStyles.semiBold.copyWith( + color: AppColors.selectedButtonText, + fontSize: 16.sp, + ), + ), + buttonText: ' ', + suffixWidget: const Icon( + Icons.arrow_forward_outlined, + color: AppColors.selectedButtonText, + ), + onPressed: () { + if (formKey.currentState!.validate()) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const CompleteProfile(); + }, + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Enter Valid OTP')), + ); + } + }, + ); + } +} diff --git a/lib/ui/authentication/mobile/helper/get_otp_text_field.dart b/lib/ui/authentication/mobile/helper/get_otp_text_field.dart new file mode 100644 index 0000000..51f0f6c --- /dev/null +++ b/lib/ui/authentication/mobile/helper/get_otp_text_field.dart @@ -0,0 +1,52 @@ +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:pin_code_fields/pin_code_fields.dart'; +class GetOtpTextField extends StatelessWidget { + const GetOtpTextField({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return PinCodeTextField( + validator: (value) { + if (value?.length != 6) { + return 'Enter Valid OTP'; + } else { + return null; + } + }, + length: 6, + obscureText: false, + keyboardType: TextInputType.number, + animationType: AnimationType.scale, + hintCharacter: ' ', + cursorColor: AppColors.primary, + cursorHeight: 20.h, + textStyle: TextStyles.light.copyWith( + fontSize: 15.sp, + color: AppColors.white, + fontFamily: 'Sora', + ), + pinTheme: PinTheme( + activeColor: AppColors.buttonBg, + inactiveFillColor: AppColors.buttonBg, + activeFillColor: AppColors.buttonBg, + selectedColor: AppColors.buttonBg, + selectedFillColor: AppColors.buttonBg, + inactiveColor: AppColors.buttonBg, + fieldHeight: 42.w, + fieldWidth: 42.w, + ), + enableActiveFill: true, + onCompleted: (v) {}, + onChanged: (value) {}, + beforeTextPaste: (text) { + return true; + }, + appContext: context, + ); + } +} diff --git a/lib/ui/authentication/mobile/helper/sign_in_body.dart b/lib/ui/authentication/mobile/helper/sign_in_body.dart new file mode 100644 index 0000000..61f7921 --- /dev/null +++ b/lib/ui/authentication/mobile/helper/sign_in_body.dart @@ -0,0 +1,70 @@ +import 'package:cardtrading/ui/authentication/mobile/helper/sign_in_button.dart'; +import 'package:cardtrading/ui/authentication/mobile/helper/sign_in_text_field.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class SignInBodyWidget extends StatelessWidget { + const SignInBodyWidget({ + super.key, + required this.formKey, + }); + + final GlobalKey formKey; + + @override + Widget build(BuildContext context) { + return Form( + key: formKey, + child: Column( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: 0.6.sw, + child: Text( + AppStrings.keySignInTitle, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + ), + ), + ), + SizedBox( + height: 10.h, + ), + SizedBox( + width: 0.9.sw, + child: Text( + AppStrings.keySignInContent, + style: TextStyles.regular.copyWith( + fontSize: 12.sp, + color: AppColors.checkoutTextColor, + ), + ), + ), + SizedBox( + height: 30.h, + ), + + ///Enter Phone Number Text Fields + const SignInTextField(), + ], + ), + ), + ), + ), + SignInButton(formKey: formKey), + ], + ), + ); + } +} diff --git a/lib/ui/authentication/mobile/helper/sign_in_button.dart b/lib/ui/authentication/mobile/helper/sign_in_button.dart new file mode 100644 index 0000000..9142089 --- /dev/null +++ b/lib/ui/authentication/mobile/helper/sign_in_button.dart @@ -0,0 +1,51 @@ +import 'package:cardtrading/ui/authentication/get_otp.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class SignInButton extends StatelessWidget { + const SignInButton({ + super.key, + required this.formKey, + }); + + final GlobalKey formKey; + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 20.0.w, vertical: 25.0.h), + child: CommonButton( + buttonPadding: const EdgeInsets.symmetric(horizontal: 8.0), + buttonHeight: 54.h, + prefixWidget: Text( + AppStrings.keyGetOtp, + style: TextStyles.semiBold.copyWith( + color: AppColors.selectedButtonText, + fontSize: 16.sp, + ), + ), + buttonText: '', + suffixWidget: const Icon( + Icons.arrow_forward_outlined, + color: Colors.black, + ), + onPressed: () { + if (formKey.currentState!.validate()) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const GetOtp(); + }, + ), + ); + } + }, + ), + ); + } +} diff --git a/lib/ui/authentication/mobile/helper/sign_in_text_field.dart b/lib/ui/authentication/mobile/helper/sign_in_text_field.dart index 7e61451..b8c168f 100644 --- a/lib/ui/authentication/mobile/helper/sign_in_text_field.dart +++ b/lib/ui/authentication/mobile/helper/sign_in_text_field.dart @@ -12,13 +12,11 @@ class SignInTextField extends StatelessWidget { @override Widget build(BuildContext context) { - final FocusNode signInFocusNode = FocusNode(); return Padding( - padding: const EdgeInsets.all(8.0), + padding: EdgeInsets.all(8.0.w), child: TextFormField( - focusNode: signInFocusNode, onTapOutside: (pointer) { - signInFocusNode.unfocus(); + FocusManager.instance.primaryFocus?.unfocus(); }, validator: (value) { if (value?.length != 10) { diff --git a/lib/ui/authentication/mobile/sign_in_mobile.dart b/lib/ui/authentication/mobile/sign_in_mobile.dart index 7862d68..4f644b4 100644 --- a/lib/ui/authentication/mobile/sign_in_mobile.dart +++ b/lib/ui/authentication/mobile/sign_in_mobile.dart @@ -1,10 +1,9 @@ -import 'package:cardtrading/ui/authentication/get_otp.dart'; -import 'package:cardtrading/ui/authentication/mobile/helper/sign_in_text_field.dart'; +import 'package:cardtrading/ui/authentication/mobile/helper/sign_in_body.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -24,8 +23,7 @@ class _SignInMobileState extends ConsumerState { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: AppBar( - elevation: 0, + appBar: CommonAppBar( backgroundColor: AppColors.background, leading: IconButton( onPressed: () { @@ -34,100 +32,18 @@ class _SignInMobileState extends ConsumerState { icon: SvgPicture.asset('${AppAssets.svgLocation}arrow_right_line.svg'), ), - title: Text( + titleWidget: Text( AppStrings.keySignIn, style: TextStyles.medium.copyWith( fontSize: 16.sp, color: AppColors.white, ), ), - centerTitle: true, + isTitleCentered: true, ), - body: Form( - key: _formKey, - child: Column( - children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - width: 0.6.sw, - child: Text( - AppStrings.keySignInTitle, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, - ), - ), - ), - SizedBox( - height: 10.h, - ), - SizedBox( - width: 0.9.sw, - child: Text( - AppStrings.keySignInContent, - style: TextStyles.regular.copyWith( - fontSize: 12.sp, - color: AppColors.checkoutTextColor, - ), - ), - ), - SizedBox( - height: 30.h, - ), - - ///Enter Phone Number Text Fields - const SignInTextField(), - ], - ), - ), - ), - ), - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 20.0, vertical: 25.0), - child: _commonButton(context), - ), - ], - ), - ), - ); - } - ///Common Button - Widget _commonButton(BuildContext context) { - return CommonButton( - buttonPadding: const EdgeInsets.symmetric(horizontal: 8.0), - buttonHeight: 54.h, - prefixWidget: Text( - AppStrings.keyGetOtp, - style: TextStyles.semiBold.copyWith( - color: AppColors.selectedButtonText, - fontSize: 16.sp, - ), - ), - buttonText: '', - suffixWidget: const Icon( - Icons.arrow_forward_outlined, - color: Colors.black, - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const GetOtp(); - }, - ), - ); - } - }, + body: SignInBodyWidget(formKey: _formKey), ); } + } + diff --git a/lib/ui/card_details/mobile/card_details_mobile.dart b/lib/ui/card_details/mobile/card_details_mobile.dart index dc56873..dbdb17f 100644 --- a/lib/ui/card_details/mobile/card_details_mobile.dart +++ b/lib/ui/card_details/mobile/card_details_mobile.dart @@ -1,32 +1,27 @@ import 'package:cardtrading/framework/controllers/card_details/card_details_controller.dart'; import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; -import 'package:cardtrading/ui/card_details/mobile/helper/card_details_icons.dart'; -import 'package:cardtrading/ui/checkout/checkout.dart'; +import 'package:cardtrading/ui/card_details/mobile/helper/add_to_card_button.dart'; +import 'package:cardtrading/ui/card_details/mobile/helper/card_description.dart'; +import 'package:cardtrading/ui/card_details/mobile/helper/card_details_bottom_content.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -class CardDetailsMobile extends ConsumerStatefulWidget { +class CardDetailsMobile extends StatelessWidget { CardDetailsMobile({super.key, required this.url}); final String url; final cartModel = CartModel(cardName: AppStrings.keyCardDescription, cardType: AppStrings.keyCardExclusive, cardQty: 1, cardPrice: AppStrings.keyCardPrice); - @override - ConsumerState createState() => _CardDetailsMobileState(); -} - -class _CardDetailsMobileState extends ConsumerState { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: Text( + appBar: CommonAppBar( + titleWidget: Text( AppStrings.keyCardDetail, style: TextStyles.medium.copyWith(fontSize: 16.sp), ), @@ -35,8 +30,7 @@ class _CardDetailsMobileState extends ConsumerState { Navigator.pop(context); }, icon: const Icon(Icons.arrow_back)), - centerTitle: true, - elevation: 0, + isTitleCentered: true, backgroundColor: AppColors.background, ), backgroundColor: AppColors.background, @@ -49,70 +43,14 @@ class _CardDetailsMobileState extends ConsumerState { padding: EdgeInsets.symmetric(vertical: 20.h), height: 340.h, child: Image.asset( - widget.url, + url, width: 200.w, height: 300.h, fit: BoxFit.fill, ), ), _divider(), - ListTile( - title: Text( - widget.cartModel.cardName, - maxLines: 2, - softWrap: true, - style: TextStyles.medium.copyWith(color: AppColors.white), - ), - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Consumer(builder: - (BuildContext context, WidgetRef ref, Widget? child) { - final cardDetailsWatch = ref.watch(cardDetailsController); - return IconButton( - iconSize: 24, - padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), - onPressed: () { - cardDetailsWatch.setFavourite(); - }, - icon: Icon( - cardDetailsWatch.isFavourite - ? Icons.favorite - : Icons.favorite_border, - color: AppColors.primary, - ), - ); - }), - Text( - AppStrings.keyCardLikesCount, - style: TextStyles.regular, - ), - ], - ), - subtitle: Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - width: 70.w, - height: 20.h, - color: AppColors.golden, - child: Center( - child: Text( - widget.cartModel.cardType, - style: TextStyles.semiBold - .copyWith(color: Colors.black, fontSize: 12.sp), - ), - ), - ), - const Expanded( - child: Text(''), - ), - ], - ), - ), - ), + CardDescription(cartModel: cartModel), _divider(), Padding( padding: const EdgeInsets.all(20.0), @@ -160,79 +98,11 @@ class _CardDetailsMobileState extends ConsumerState { }), ), _divider(), - Container( - width: double.infinity, - height: 0.25.sh, - decoration: const BoxDecoration( - color: AppColors.containerBg, - ), - margin: const EdgeInsets.all(20.0), - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text( - AppStrings.keyCollectiveProducts, - style: TextStyles.semiBold.copyWith( - fontSize: 16.sp, - color: AppColors.white, - ), - ), - Consumer(builder: - (BuildContext context, WidgetRef ref, Widget? child) { - final cardDetailsWatch = ref.watch(cardDetailsController); - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - ...List.generate( - cardDetailsWatch.cardDetailDescription.length, - (index) { - return CardDetailsIcon( - svg: SvgPicture.asset( - cardDetailsWatch.cardDetailIcons[index], - width: 40.w, - height: 40.h, - ), - title: - cardDetailsWatch.cardDetailDescription[index], - ); - }) - ], - ); - }), - ], - ), - ), + const CardDetailsBottomContent(), ], ), ), - bottomNavigationBar: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 12.0), - child: CommonButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return Checkout(cartModel: widget.cartModel,); - }, - ), - ); - }, - buttonText: '', - buttonPadding: const EdgeInsets.all(12.0), - prefixWidget: Text( - AppStrings.keyCardPrice2, - style: TextStyles.semiBold - .copyWith(fontSize: 16.sp, color: AppColors.dividerColor), - ), - suffixWidget: Text( - AppStrings.keyAddToCart, - style: TextStyles.semiBold - .copyWith(fontSize: 16.sp, color: AppColors.dividerColor), - ), - ), - ), + bottomNavigationBar: AddToCartButton(cartModel: cartModel,), ); } @@ -242,4 +112,4 @@ class _CardDetailsMobileState extends ConsumerState { color: AppColors.dividerColor, ); } -} +} \ No newline at end of file diff --git a/lib/ui/card_details/mobile/helper/add_to_card_button.dart b/lib/ui/card_details/mobile/helper/add_to_card_button.dart new file mode 100644 index 0000000..ee400b3 --- /dev/null +++ b/lib/ui/card_details/mobile/helper/add_to_card_button.dart @@ -0,0 +1,48 @@ +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; +import 'package:cardtrading/ui/checkout/checkout.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class AddToCartButton extends StatelessWidget { + const AddToCartButton({ + super.key, + required this.cartModel, + }); + + final CartModel? cartModel; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 12.0), + child: CommonButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return Checkout(cartModel: cartModel,); + }, + ), + ); + }, + buttonText: '', + buttonPadding: const EdgeInsets.all(12.0), + prefixWidget: Text( + AppStrings.keyCardPrice2, + style: TextStyles.semiBold + .copyWith(fontSize: 16.sp, color: AppColors.dividerColor), + ), + suffixWidget: Text( + AppStrings.keyAddToCart, + style: TextStyles.semiBold + .copyWith(fontSize: 16.sp, color: AppColors.dividerColor), + ), + ), + ); + } +} diff --git a/lib/ui/card_details/mobile/helper/card_description.dart b/lib/ui/card_details/mobile/helper/card_description.dart new file mode 100644 index 0000000..efd5b2c --- /dev/null +++ b/lib/ui/card_details/mobile/helper/card_description.dart @@ -0,0 +1,78 @@ +import 'package:cardtrading/framework/controllers/card_details/card_details_controller.dart'; +import 'package:cardtrading/framework/controllers/checkout/checkout_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class CardDescription extends StatelessWidget { + const CardDescription({ + super.key, + required this.cartModel, + }); + + final CartModel cartModel; + + @override + Widget build(BuildContext context) { + return ListTile( + title: Text( + cartModel.cardName, + maxLines: 2, + softWrap: true, + style: TextStyles.medium.copyWith(color: AppColors.white), + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Consumer(builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final cardDetailsWatch = ref.watch(cardDetailsController); + return IconButton( + iconSize: 24, + padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), + onPressed: () { + cardDetailsWatch.setFavourite(); + }, + icon: Icon( + cardDetailsWatch.isFavourite + ? Icons.favorite + : Icons.favorite_border, + color: AppColors.primary, + ), + ); + }), + Text( + AppStrings.keyCardLikesCount, + style: TextStyles.regular, + ), + ], + ), + subtitle: Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + width: 70.w, + height: 20.h, + color: AppColors.golden, + child: Center( + child: Text( + cartModel.cardType, + style: TextStyles.semiBold + .copyWith(color: Colors.black, fontSize: 12.sp), + ), + ), + ), + const Expanded( + child: Text(''), + ), + ], + ), + ), + ); + } +} diff --git a/lib/ui/card_details/mobile/helper/card_details_bottom_content.dart b/lib/ui/card_details/mobile/helper/card_details_bottom_content.dart new file mode 100644 index 0000000..c1f4aef --- /dev/null +++ b/lib/ui/card_details/mobile/helper/card_details_bottom_content.dart @@ -0,0 +1,63 @@ +import 'package:cardtrading/framework/controllers/card_details/card_details_controller.dart'; +import 'package:cardtrading/ui/card_details/mobile/helper/card_details_icons.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CardDetailsBottomContent extends StatelessWidget { + const CardDetailsBottomContent({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Container( + width: double.infinity, + height: 0.25.sh, + decoration: const BoxDecoration( + color: AppColors.containerBg, + ), + margin: const EdgeInsets.all(20.0), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Text( + AppStrings.keyCollectiveProducts, + style: TextStyles.semiBold.copyWith( + fontSize: 16.sp, + color: AppColors.white, + ), + ), + Consumer(builder: + (BuildContext context, WidgetRef ref, Widget? child) { + final cardDetailsWatch = ref.watch(cardDetailsController); + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + ...List.generate( + cardDetailsWatch.cardDetailDescription.length, + (index) { + return CardDetailsIcon( + svg: SvgPicture.asset( + cardDetailsWatch.cardDetailIcons[index], + width: 40.w, + height: 40.h, + ), + title: + cardDetailsWatch.cardDetailDescription[index], + ); + }) + ], + ); + }), + ], + ), + ); + } +} + diff --git a/lib/ui/card_shop/mobile/card_shop_mobile.dart b/lib/ui/card_shop/mobile/card_shop_mobile.dart index 9bbcd92..93e0b8e 100644 --- a/lib/ui/card_shop/mobile/card_shop_mobile.dart +++ b/lib/ui/card_shop/mobile/card_shop_mobile.dart @@ -1,44 +1,35 @@ import 'package:cardtrading/framework/controllers/card_shop/card_shop_controller.dart'; -import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; -import 'package:cardtrading/ui/authentication/get_otp.dart'; -import 'package:cardtrading/ui/card_shop/card_shop.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/card_shop/mobile/helper/card_shop_grid.dart'; +import 'package:cardtrading/ui/card_shop/mobile/helper/card_shop_search_bar.dart'; +import 'package:cardtrading/ui/card_shop/mobile/helper/card_shop_tab_bar.dart'; +import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/shop_card.dart'; +import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class CardShopMobile extends ConsumerStatefulWidget { +class CardShopMobile extends StatelessWidget { const CardShopMobile({super.key}); - @override - ConsumerState createState() => _CardShopMobileState(); -} - -class _CardShopMobileState extends ConsumerState { - final GlobalKey _globalKey = GlobalKey(); - @override Widget build(BuildContext context) { return Scaffold( - key: _globalKey, - appBar: AppBar( + appBar: CommonAppBar( backgroundColor: AppColors.background, - elevation: 0, leading: IconButton( icon: SvgPicture.asset('${AppAssets.svgLocation}menu.svg'), onPressed: () { - _globalKey.currentState!.openDrawer(); + Navigator.push(context, MaterialPageRoute(builder: (context){ + return const HomeScreenDrawer(); + },),); }, ), - title: const Text(AppStrings.keyShop), - centerTitle: true, + titleWidget: const Text(AppStrings.keyShop), + isTitleCentered: true, actions: [ Padding( padding: const EdgeInsets.all(10.0), @@ -46,229 +37,25 @@ class _CardShopMobileState extends ConsumerState { ), ], ), - drawer: const HomeScreenDrawer(), backgroundColor: AppColors.background, body: SingleChildScrollView( - child: Column( - children: [ - _tabBar(), - ref.watch(cardShopController).pageIndex == 0 - ? Container( - height: 30.h, - margin: const EdgeInsets.all(20.0), - child: Row( - children: [ - Expanded( - child: TextFormField( - decoration: InputDecoration( - hintText: AppStrings.keySearchHere, - border: const UnderlineInputBorder( - borderSide: BorderSide( - color: AppColors.dividerColor, - style: BorderStyle.solid, - ), - ), - prefixIcon: SvgPicture.asset( - '${AppAssets.svgLocation}search_dark.svg', - width: 24.w, - height: 24.h, - ), - ), - ), - ), - SvgPicture.asset( - '${AppAssets.svgLocation}sort.svg', - width: 24.w, - height: 24.h, - ), - SizedBox( - width: 11.w, - ), - SvgPicture.asset( - '${AppAssets.svgLocation}filter.svg', - width: 24.w, - height: 24.h, - ), - ], - ), - ) - : Container(), - ref.watch(cardShopController).pageIndex == 0 - ? Container( - width: 0.9.sw, - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: GridView.builder( - physics: const NeverScrollableScrollPhysics(), - itemCount: 6, - shrinkWrap: true, - gridDelegate: - const SliverGridDelegateWithFixedCrossAxisCount( - mainAxisSpacing: 2, - crossAxisSpacing: 1, - crossAxisCount: 2, - childAspectRatio: 0.5), - itemBuilder: (context, index) { - return ShopCard( - index: index, - ); - }, - ), - ) - : Container(), - ], - ), - ), - bottomNavigationBar: Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - final homeScreenWatch = ref.watch(homeScreenController); - return Padding( - padding: const EdgeInsets.only(bottom: 16.0), - child: BottomNavigationBar( - items: [ - ...List.generate( - 4, - (index) { - return BottomNavigationBarItem( - icon: Container( - padding: const EdgeInsets.only(top: 8.0), - decoration: BoxDecoration( - border: BorderDirectional( - top: BorderSide( - color: homeScreenWatch.id == index - ? AppColors.primary - : Colors.transparent, - width: 2.0, - ), - ), - ), - child: SvgPicture.asset(homeScreenWatch - .bottomNavigationBarSvgPath[index]), - ), - label: AppStrings.keyHome, - backgroundColor: AppColors.background); - }, - ), + child: Consumer( + builder: (BuildContext context,WidgetRef ref, Widget? widget) { + return Column( + children: [ + const CardShopTabBar(), + ref.watch(cardShopController).pageIndex == 0 + ? const CardShopSearchBar() + : Container(), + ref.watch(cardShopController).pageIndex == 0 + ? const CardShopGrid() + : Container(), ], - selectedFontSize: 10.sp, - unselectedFontSize: 10.sp, - backgroundColor: AppColors.background, - currentIndex: homeScreenWatch.id, - type: BottomNavigationBarType.shifting, - showUnselectedLabels: true, - selectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.primary, fontSize: 12.sp), - selectedItemColor: AppColors.primary, - unselectedLabelStyle: TextStyles.regular - .copyWith(color: AppColors.white, fontSize: 12.sp), - onTap: (index) { - homeScreenWatch.setId(newId: index); - if (homeScreenWatch.id == 1 || homeScreenWatch.id == 3) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const GetOtp(); - }, - ), - ); - } - homeScreenWatch.id == 2 - ? Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const CardShop(); - }, - ), - ) - : Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); - }, - ), - ); - }, - ), - ); - } - - Widget _tabBar() { - return Container( - decoration: BoxDecoration( - border: Border.all( - color: AppColors.indicatorColor, - width: 1.5, + ); + } ), ), - margin: const EdgeInsets.symmetric(horizontal: 20.0), - child: Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { - final cardShopWatcher = ref.watch(cardShopController); - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - InkWell( - child: Container( - padding: const EdgeInsets.symmetric(vertical: 13.0), - decoration: cardShopWatcher.pageIndex == 0 - ? const BoxDecoration( - border: Border( - top: BorderSide( - color: AppColors.primary, - width: 2.0, - ), - ), - ) - : null, - child: Text( - AppStrings.keyCardExclusive, - style: TextStyles.regular.copyWith( - fontFamily: TextStyles.secondaryFontFamily, - color: cardShopWatcher.pageIndex == 0 - ? AppColors.primary - : AppColors.indicatorColor, - ), - ), - ), - onTap: () { - cardShopWatcher.setOrIncrementPageIndex(index: 0); - }, - ), - InkWell( - child: Container( - padding: const EdgeInsets.symmetric(vertical: 13.0), - decoration: cardShopWatcher.pageIndex == 1 - ? const BoxDecoration( - border: Border( - top: BorderSide( - color: AppColors.primary, - width: 2.0, - ), - ), - ) - : null, - child: Text( - AppStrings.keyOpenStore, - style: TextStyles.regular.copyWith( - fontFamily: TextStyles.secondaryFontFamily, - color: cardShopWatcher.pageIndex == 1 - ? AppColors.primary - : AppColors.indicatorColor, - ), - ), - ), - onTap: () { - cardShopWatcher.setOrIncrementPageIndex(index: 1); - }, - ), - ], - ); - }), + bottomNavigationBar: const HomeScreenBottomNavigationBar(), ); } } diff --git a/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart b/lib/ui/card_shop/mobile/helper/card_shop_grid.dart similarity index 61% rename from lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart rename to lib/ui/card_shop/mobile/helper/card_shop_grid.dart index 3ef3779..c3d5bd9 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_card_grid.dart +++ b/lib/ui/card_shop/mobile/helper/card_shop_grid.dart @@ -2,8 +2,8 @@ import 'package:cardtrading/ui/utils/widget/shop_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -class HomeScreenCardsGrid extends StatelessWidget { - const HomeScreenCardsGrid({ +class CardShopGrid extends StatelessWidget { + const CardShopGrid({ super.key, }); @@ -11,17 +11,17 @@ class HomeScreenCardsGrid extends StatelessWidget { Widget build(BuildContext context) { return Container( width: 0.9.sw, - padding: EdgeInsets.symmetric(vertical: 8.0.h), + padding: const EdgeInsets.symmetric(vertical: 8.0), child: GridView.builder( physics: const NeverScrollableScrollPhysics(), itemCount: 6, shrinkWrap: true, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - mainAxisSpacing: 2, - crossAxisSpacing: 1, - crossAxisCount: 2, - childAspectRatio: 0.5, - ), + gridDelegate: + const SliverGridDelegateWithFixedCrossAxisCount( + mainAxisSpacing: 2, + crossAxisSpacing: 1, + crossAxisCount: 2, + childAspectRatio: 0.5), itemBuilder: (context, index) { return ShopCard( index: index, @@ -31,3 +31,5 @@ class HomeScreenCardsGrid extends StatelessWidget { ); } } + + diff --git a/lib/ui/card_shop/mobile/helper/card_shop_search_bar.dart b/lib/ui/card_shop/mobile/helper/card_shop_search_bar.dart new file mode 100644 index 0000000..7766bdb --- /dev/null +++ b/lib/ui/card_shop/mobile/helper/card_shop_search_bar.dart @@ -0,0 +1,55 @@ +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CardShopSearchBar extends StatelessWidget { + const CardShopSearchBar({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Container( + height: 30.h, + margin: const EdgeInsets.all(20.0), + child: Row( + children: [ + Expanded( + child: TextFormField( + decoration: InputDecoration( + hintText: AppStrings.keySearchHere, + border: const UnderlineInputBorder( + borderSide: BorderSide( + color: AppColors.dividerColor, + style: BorderStyle.solid, + ), + ), + prefixIcon: SvgPicture.asset( + '${AppAssets.svgLocation}search_dark.svg', + width: 24.w, + height: 24.h, + ), + ), + ), + ), + SvgPicture.asset( + '${AppAssets.svgLocation}sort.svg', + width: 24.w, + height: 24.h, + ), + SizedBox( + width: 11.w, + ), + SvgPicture.asset( + '${AppAssets.svgLocation}filter.svg', + width: 24.w, + height: 24.h, + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/ui/card_shop/mobile/helper/card_shop_tab_bar.dart b/lib/ui/card_shop/mobile/helper/card_shop_tab_bar.dart new file mode 100644 index 0000000..dba7ba1 --- /dev/null +++ b/lib/ui/card_shop/mobile/helper/card_shop_tab_bar.dart @@ -0,0 +1,88 @@ +import 'package:cardtrading/framework/controllers/card_shop/card_shop_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class CardShopTabBar extends StatelessWidget { + const CardShopTabBar({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + border: Border.all( + color: AppColors.indicatorColor, + width: 1.5, + ), + ), + margin: const EdgeInsets.symmetric(horizontal: 20.0), + child: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + final cardShopWatcher = ref.watch(cardShopController); + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InkWell( + child: Container( + padding: const EdgeInsets.symmetric(vertical: 13.0), + decoration: cardShopWatcher.pageIndex == 0 + ? const BoxDecoration( + border: Border( + top: BorderSide( + color: AppColors.primary, + width: 2.0, + ), + ), + ) + : null, + child: Text( + AppStrings.keyCardExclusive, + style: TextStyles.regular.copyWith( + fontFamily: TextStyles.secondaryFontFamily, + color: cardShopWatcher.pageIndex == 0 + ? AppColors.primary + : AppColors.indicatorColor, + ), + ), + ), + onTap: () { + cardShopWatcher.setOrIncrementPageIndex(index: 0); + }, + ), + InkWell( + child: Container( + padding: const EdgeInsets.symmetric(vertical: 13.0), + decoration: cardShopWatcher.pageIndex == 1 + ? const BoxDecoration( + border: Border( + top: BorderSide( + color: AppColors.primary, + width: 2.0, + ), + ), + ) + : null, + child: Text( + AppStrings.keyOpenStore, + style: TextStyles.regular.copyWith( + fontFamily: TextStyles.secondaryFontFamily, + color: cardShopWatcher.pageIndex == 1 + ? AppColors.primary + : AppColors.indicatorColor, + ), + ), + ), + onTap: () { + cardShopWatcher.setOrIncrementPageIndex(index: 1); + }, + ), + ], + ); + }), + ); + } +} \ No newline at end of file diff --git a/lib/ui/choose_language/mobile/choose_language_mobile.dart b/lib/ui/choose_language/mobile/choose_language_mobile.dart index 95c777c..cb39a62 100644 --- a/lib/ui/choose_language/mobile/choose_language_mobile.dart +++ b/lib/ui/choose_language/mobile/choose_language_mobile.dart @@ -1,23 +1,15 @@ -import 'package:cardtrading/framework/controllers/choose_language/choose_language_controller.dart'; import 'package:cardtrading/ui/choose_language/mobile/helper/choose_language_button.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:cardtrading/ui/choose_language/mobile/helper/choose_language_next_button.dart'; -class ChooseLanguageMobile extends ConsumerStatefulWidget { +class ChooseLanguageMobile extends StatelessWidget { const ChooseLanguageMobile({super.key}); - @override - ConsumerState createState() => - _ChooseLanguageMobileState(); -} - -class _ChooseLanguageMobileState extends ConsumerState { @override Widget build(BuildContext context) { return Scaffold( @@ -53,8 +45,8 @@ class _ChooseLanguageMobileState extends ConsumerState { /// Buttons to Select Languages ...List.generate( - ref.watch(chooseLanguageController).languages.length, - (index) { + 2, + (index) { return ChooseLanguageButton(index: index); }, ), diff --git a/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart b/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart index c40f2c8..3ae6200 100644 --- a/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart +++ b/lib/ui/complete_your_profile/mobile/complete_profile_mobile.dart @@ -23,17 +23,17 @@ class CompleteProfileMobile extends StatelessWidget { isTitleCentered: true, titleWidget: Consumer( builder: (BuildContext context, WidgetRef ref, Widget? widget) { - final completeProfileWatch = ref.watch(completeProfileController); - return Text( - completeProfileWatch.page == 0 - ? AppStrings.keyCompleteYourProfile - : AppStrings.keyAddAddress, - style: TextStyles.medium.copyWith( - fontSize: 16.sp, - overflow: TextOverflow.ellipsis, - ), - ); - }), + final completeProfileWatch = ref.watch(completeProfileController); + return Text( + completeProfileWatch.page == 0 + ? AppStrings.keyCompleteYourProfile + : AppStrings.keyAddAddress, + style: TextStyles.medium.copyWith( + fontSize: 16.sp, + overflow: TextOverflow.ellipsis, + ), + ); + }), leading: Padding( padding: EdgeInsets.all(12.0.w), child: InkWell( @@ -50,19 +50,19 @@ class CompleteProfileMobile extends StatelessWidget { ), body: Consumer( builder: (BuildContext context, WidgetRef ref, Widget? widget) { - final completeProfileWatch = ref.watch(completeProfileController); - return PageView( - controller: completeProfileWatch.pageController, - physics: const ScrollPhysics(parent: NeverScrollableScrollPhysics()), - onPageChanged: (index) { - completeProfileWatch.changePage(index); - }, - children: const [ - CompleteYourProfile(), - AddAddressScreen(), - ], - ); - }), + final completeProfileWatch = ref.watch(completeProfileController); + return PageView( + controller: completeProfileWatch.pageController, + physics: const ScrollPhysics(parent: NeverScrollableScrollPhysics()), + onPageChanged: (index) { + completeProfileWatch.changePage(index); + }, + children: const [ + CompleteYourProfile(), + AddAddressScreen(), + ], + ); + }), ); } } diff --git a/lib/ui/complete_your_profile/mobile/helper/add_address_header.dart b/lib/ui/complete_your_profile/mobile/helper/add_address_header.dart new file mode 100644 index 0000000..04cba11 --- /dev/null +++ b/lib/ui/complete_your_profile/mobile/helper/add_address_header.dart @@ -0,0 +1,51 @@ +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class AddAddressHeader extends StatelessWidget { + const AddAddressHeader({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 3, + child: SizedBox( + width: 180, + child: Text( + AppStrings.keyEnterYourAddress, + softWrap: true, + maxLines: 3, + style: TextStyles.medium.copyWith( + fontSize: 18.sp, + color: AppColors.golden, + height: 1.5, + ), + ), + ), + ), + const Spacer(), + ...List.generate( + 2, + (index) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + width: 8.w, + height: 8.h, + decoration: const BoxDecoration( + color: AppColors.primary), + ), + ); + }, + ), + ], + ); + } +} diff --git a/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart b/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart index 5e95161..351e4f1 100644 --- a/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart +++ b/lib/ui/complete_your_profile/mobile/helper/add_address_screen.dart @@ -1,9 +1,10 @@ import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profile_controller.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/complete_your_profile/mobile/helper/add_address_header.dart'; +import 'package:cardtrading/ui/complete_your_profile/mobile/helper/address_type_field.dart'; +import 'package:cardtrading/ui/complete_your_profile/mobile/helper/sign_up_button.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -28,42 +29,7 @@ class AddAddressScreen extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - flex: 3, - child: SizedBox( - width: 180, - child: Text( - AppStrings.keyEnterYourAddress, - softWrap: true, - maxLines: 3, - style: TextStyles.medium.copyWith( - fontSize: 18.sp, - color: AppColors.golden, - height: 1.5, - ), - ), - ), - ), - const Spacer(), - ...List.generate( - 2, - (index) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: Container( - width: 8.w, - height: 8.h, - decoration: const BoxDecoration( - color: AppColors.primary), - ), - ); - }, - ), - ], - ), + const AddAddressHeader(), SizedBox( height: 15.h, ), @@ -126,10 +92,6 @@ class AddAddressScreen extends StatelessWidget { filled: true, contentPadding: EdgeInsets.all(16.0), ), - onMenuStateChange: (isChanged) { - completeProfileWatch.secondPageFormKey.currentState! - .validate(); - }, validator: (value) { if (!completeProfileWatch.blocks.contains(value)) { return 'This Field is mandatory'; @@ -170,10 +132,6 @@ class AddAddressScreen extends StatelessWidget { filled: true, contentPadding: EdgeInsets.all(16.0), ), - onMenuStateChange: (isChanged) { - completeProfileWatch.secondPageFormKey.currentState! - .validate(); - }, validator: (value) { if (!completeProfileWatch.streets.contains(value)) { return 'This Field is mandatory'; @@ -299,87 +257,12 @@ class AddAddressScreen extends StatelessWidget { SizedBox( height: 10.h, ), - Row( - children: [ - ...List.generate( - 3, - (index) { - return Row( - children: [ - InkWell( - child: Container( - decoration: BoxDecoration( - color: - completeProfileWatch.id == index - ? AppColors.primary - : AppColors.buttonBg, - ), - padding: EdgeInsets.symmetric( - horizontal: 16.0.w, - vertical: 8.0.h), - child: Text( - completeProfileWatch - .addressTypes[index], - style: TextStyles.regular.copyWith( - color: completeProfileWatch.id == - index - ? AppColors.selectedButtonText - : AppColors.greyText, - fontSize: 12.sp, - ), - ), - ), - onTap: () { - completeProfileWatch.setId(index); - }, - ), - SizedBox( - width: 10.0.w, - ), - ], - ); - }, - ), - ], - ) + const AddressTypeField() ], ), ), ), - Padding( - padding: EdgeInsets.symmetric(vertical: 24.h), - child: CommonButton( - buttonPadding: const EdgeInsets.all(8.0), - prefixWidget: Text( - AppStrings.keySignUp, - style: TextStyles.semiBold.copyWith( - color: AppColors.selectedButtonText, - fontSize: 16.sp, - ), - ), - buttonText: ' ', - suffixWidget: const Icon( - Icons.arrow_forward_outlined, - color: AppColors.selectedButtonText, - ), - onPressed: () { - if (completeProfileWatch.secondPageFormKey.currentState! - .validate()) { - completeProfileWatch.secondPageFormKey.currentState! - .save(); - completeProfileWatch.resetPage(); - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); - } - }, - ), - ), + const SignUpButton(), ], ), ), diff --git a/lib/ui/complete_your_profile/mobile/helper/address_type_field.dart b/lib/ui/complete_your_profile/mobile/helper/address_type_field.dart new file mode 100644 index 0000000..6ffffdd --- /dev/null +++ b/lib/ui/complete_your_profile/mobile/helper/address_type_field.dart @@ -0,0 +1,64 @@ +import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profile_controller.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class AddressTypeField extends StatelessWidget { + const AddressTypeField({super.key,}); + + @override + Widget build(BuildContext context) { + return Row( + children: [ + ...List.generate( + 3, + (index) { + return Row( + children: [ + Consumer( + builder: (context,ref,widget) { + final completeProfileWatch = ref.watch(completeProfileController); + return InkWell( + child: Container( + decoration: BoxDecoration( + color: + completeProfileWatch.id == index + ? AppColors.primary + : AppColors.buttonBg, + ), + padding: EdgeInsets.symmetric( + horizontal: 16.0.w, + vertical: 8.0.h), + child: Text( + completeProfileWatch + .addressTypes[index], + style: TextStyles.regular.copyWith( + color: completeProfileWatch.id == + index + ? AppColors.selectedButtonText + : AppColors.greyText, + fontSize: 12.sp, + ), + ), + ), + onTap: () { + completeProfileWatch.setId(index); + }, + ); + } + ), + SizedBox( + width: 10.0.w, + ), + ], + ); + }, + ), + ], + ); + } +} + + diff --git a/lib/ui/complete_your_profile/mobile/helper/sign_up_button.dart b/lib/ui/complete_your_profile/mobile/helper/sign_up_button.dart new file mode 100644 index 0000000..a84b7bc --- /dev/null +++ b/lib/ui/complete_your_profile/mobile/helper/sign_up_button.dart @@ -0,0 +1,56 @@ +import 'package:cardtrading/framework/controllers/complete_your_profile/complete_profile_controller.dart'; +import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_button.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class SignUpButton extends StatelessWidget { + const SignUpButton({super.key}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(vertical: 24.h), + child: Consumer( + builder: (BuildContext context,WidgetRef ref,Widget? widget) { + final completeProfileWatch = ref.watch(completeProfileController); + return CommonButton( + buttonPadding: const EdgeInsets.all(8.0), + prefixWidget: Text( + AppStrings.keySignUp, + style: TextStyles.semiBold.copyWith( + color: AppColors.selectedButtonText, + fontSize: 16.sp, + ), + ), + buttonText: ' ', + suffixWidget: const Icon( + Icons.arrow_forward_outlined, + color: AppColors.selectedButtonText, + ), + onPressed: () { + if (completeProfileWatch.secondPageFormKey.currentState! + .validate()) { + completeProfileWatch.secondPageFormKey.currentState! + .save(); + completeProfileWatch.resetPage(); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); + } + }, + ); + } + ), + ); + } +} diff --git a/lib/ui/featured_seller/mobile/featured_seller_mobile.dart b/lib/ui/featured_seller/mobile/featured_seller_mobile.dart index 9d13d90..b9df1d1 100644 --- a/lib/ui/featured_seller/mobile/featured_seller_mobile.dart +++ b/lib/ui/featured_seller/mobile/featured_seller_mobile.dart @@ -1,9 +1,7 @@ -import 'package:cardtrading/ui/featured_seller/mobile/helper/featured_seller_body.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -14,28 +12,59 @@ class FeaturedSellerMobile extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: CommonAppBar( + appBar: AppBar( backgroundColor: AppColors.background, leading: IconButton( onPressed: () { - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); + Navigator.pop(context); }, icon: const Icon(Icons.arrow_back_outlined), ), - titleWidget: Text( + title: Text( AppStrings.keyFeaturedSellers, style: TextStyles.bold.copyWith(fontSize: 16.sp), ), - isTitleCentered: true, + centerTitle: true, + ), + body: ListView.separated( + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + return InkWell( + onTap: () {}, + child: Row( + children: [ + Container( + padding: const EdgeInsets.all(8.0), + width: 64.w, + height: 64.h, + child: CircleAvatar( + radius: 50, + backgroundImage: AssetImage( + '${AppAssets.imgLocation}profile_${index % 5}.png'), + ), + ), + Text( + AppStrings.profiles[index % 5], + textAlign: TextAlign.center, + maxLines: 2, + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + fontSize: 12.sp, + fontFamily: 'Sora', + ), + ), + ], + ), + ); + }, + itemCount: 10, + separatorBuilder: (BuildContext context, int index) { + return const Divider( + thickness: 1.0, + color: AppColors.indicatorColor, + ); + }, ), - body: const FeaturedSellerBody(), ); } } diff --git a/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart b/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart deleted file mode 100644 index 0676126..0000000 --- a/lib/ui/featured_seller/mobile/helper/featured_seller_body.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:cardtrading/ui/utils/theme/assets.dart'; -import 'package:cardtrading/ui/utils/theme/colors.dart'; -import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; - -class FeaturedSellerBody extends StatelessWidget { - const FeaturedSellerBody({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return ListView.separated( - shrinkWrap: true, - itemBuilder: (BuildContext context, int index) { - return InkWell( - onTap: () {}, - child: Row( - children: [ - Container( - padding: EdgeInsets.all(8.0.w), - width: 64.w, - height: 64.h, - child: CircleAvatar( - radius: 50.r, - backgroundImage: AssetImage( - '${AppAssets.imgLocation}profile_${index % 5}.png'), - ), - ), - Text( - AppStrings.profiles[index % 5], - textAlign: TextAlign.center, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - fontSize: 12.sp, - fontFamily: 'Sora', - ), - ), - ], - ), - ); - }, - itemCount: 10, - separatorBuilder: (BuildContext context, int index) { - return const Divider( - thickness: 1.0, - color: AppColors.indicatorColor, - ); - }, - ); - } -} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart b/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart deleted file mode 100644 index baccb8c..0000000 --- a/lib/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; -import 'package:cardtrading/ui/checkout/checkout.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class HomeScreenAppBarActions extends StatelessWidget { - const HomeScreenAppBarActions({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? widget) { - final homeScreenWatch = ref.watch(homeScreenController); - return Row( - children: [ - ...List.generate( - 3, - (index) { - return InkWell( - onTap: () { - if (index == 1) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const Checkout(); - }, - ), - ); - } - }, - child: Padding( - padding: const EdgeInsets.all(6.0), - child: SvgPicture.asset( - homeScreenWatch.appBarActionList[index]), - ), - ); - }, - ), - ], - ); - }, - ); - } -} diff --git a/lib/ui/home_screen/mobile/helper/home_screen_banner.dart b/lib/ui/home_screen/mobile/helper/home_screen_banner.dart index 1dda6ee..69fd411 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_banner.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_banner.dart @@ -41,8 +41,8 @@ class HomeScreenBanner extends StatelessWidget { left: 0, child: Container( height: 51.h, - padding: EdgeInsets.symmetric( - horizontal: 5.w, vertical: 5.h), + padding: + EdgeInsets.symmetric(horizontal: 5.w, vertical: 5.h), color: index == 1 ? AppColors.white : AppColors.primary, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -56,32 +56,26 @@ class HomeScreenBanner extends StatelessWidget { text: TextSpan( text: AppStrings.keyBuy, style: TextStyles.bold.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 12.sp, - overflow: TextOverflow.ellipsis, - color: AppColors.background, - ), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 12.sp, + color: AppColors.background), children: [ TextSpan( text: AppStrings.keyWith, style: TextStyles.regular.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - overflow: TextOverflow.ellipsis, - fontSize: 12.sp, - color: AppColors.background, - ), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 12.sp, + color: AppColors.background), ), TextSpan( text: AppStrings.keyConfidence, style: TextStyles.bold.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 12.sp, - overflow: TextOverflow.ellipsis, - color: AppColors.background, - ), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 12.sp, + color: AppColors.background), ), ], ), @@ -90,12 +84,10 @@ class HomeScreenBanner extends StatelessWidget { Text( AppStrings.keyBannerSubtitle, style: TextStyles.light.copyWith( - fontFamily: - TextStyles.secondaryFontFamily, - fontSize: 8.sp, - overflow: TextOverflow.ellipsis, - color: AppColors.background, - ), + fontFamily: + TextStyles.secondaryFontFamily, + fontSize: 8.sp, + color: AppColors.background), ) ], ), diff --git a/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart b/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart index 7c8d805..3178986 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart @@ -25,7 +25,7 @@ class HomeScreenBottomNavigationBar extends StatelessWidget { items: [ ...List.generate( 4, - (index) { + (index) { return BottomNavigationBarItem( icon: Container( padding: const EdgeInsets.only(top: 8.0), @@ -63,30 +63,30 @@ class HomeScreenBottomNavigationBar extends StatelessWidget { homeScreenWatch.setId(newId: index); index == 1 || index == 3 ? Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const GetOtp(); - }, - ), - ) + context, + MaterialPageRoute( + builder: (context) { + return const GetOtp(); + }, + ), + ) : index == 2 - ? Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const CardShop(); - }, - ), - ) - : Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); + ? Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const CardShop(); + }, + ), + ) + : Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const HomeScreen(); + }, + ), + ); }, ), ); diff --git a/lib/ui/home_screen/mobile/helper/home_screen_description.dart b/lib/ui/home_screen/mobile/helper/home_screen_description.dart index 602d07b..006beb6 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_description.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_description.dart @@ -5,31 +5,30 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeScreenDescription extends StatelessWidget { - const HomeScreenDescription({super.key, required this.title, this.onTap}); - + const HomeScreenDescription({super.key, required this.title,this.onTap}); final String title; final void Function()? onTap; @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.symmetric(horizontal: 12.0.w, vertical: 4.0.h), + padding: + const EdgeInsets.symmetric(horizontal: 12.0, vertical: 4.0), child: Row( + mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( title, - overflow: TextOverflow.ellipsis, style: TextStyles.regular .copyWith(color: AppColors.golden, fontSize: 16.sp), ), InkWell( - onTap: onTap ?? () {}, + onTap: onTap ?? (){}, child: Text( AppStrings.keySeeAll, - style: TextStyles.regular.copyWith( - color: AppColors.primary, - ), + style: + TextStyles.regular.copyWith(color: AppColors.primary), ), ), ], diff --git a/lib/ui/home_screen/mobile/helper/home_screen_divider.dart b/lib/ui/home_screen/mobile/helper/home_screen_divider.dart index 106b3e6..b1c3696 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_divider.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_divider.dart @@ -1,16 +1,15 @@ import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeScreenDivider extends StatelessWidget { const HomeScreenDivider({super.key}); @override Widget build(BuildContext context) { - return Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0.w), + return const Padding( + padding: EdgeInsets.symmetric(horizontal: 8.0), child: Divider( - thickness: 1.5.h, + thickness: 1.5, color: AppColors.dividerColor, ), ); diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart index c297d7c..ccaa6af 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_drawer.dart @@ -1,56 +1,55 @@ import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; -import 'package:cardtrading/ui/home_screen/home_screen.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer_body.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class HomeScreenDrawer extends StatelessWidget { +class HomeScreenDrawer extends ConsumerStatefulWidget { const HomeScreenDrawer({super.key}); + @override + ConsumerState createState() => _HomeScreenDrawerState(); +} + +class _HomeScreenDrawerState extends ConsumerState { + @override Widget build(BuildContext context) { return Scaffold( - appBar: CommonAppBar( - isLeadingEnable: false, + appBar: AppBar( + automaticallyImplyLeading: false, backgroundColor: AppColors.background, + elevation: 0, leading: InkWell( child: Padding( - padding: EdgeInsets.all(10.0.w), + padding: EdgeInsets.all(10.0.r), child: SvgPicture.asset('${AppAssets.svgLocation}close_line.svg'), ), onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreen(); - }, - ), - ); + Navigator.pop(context); }, ), - title: AppStrings.keyWalterWhite, - isTitleCentered: true, + title: const Text(AppStrings.keyWalterWhite), + centerTitle: true, actions: [ Consumer( - builder: (BuildContext context, WidgetRef ref, Widget? child) { + builder: (BuildContext context, WidgetRef ref, Widget? child) { final homeScreenWatch = ref.watch(homeScreenController); - return InkWell( - onTap: () { - homeScreenWatch.changeMode(); - }, - child: Padding( - padding: EdgeInsets.all(8.0.w), - child: SvgPicture.asset(homeScreenWatch.url), - ), - ); - }), + return InkWell( + onTap: () { + homeScreenWatch.changeMode(); + }, + child: Padding( + padding: EdgeInsets.all(8.0.r), + child: SvgPicture.asset(homeScreenWatch.url), + ), + ); + } + ), ], ), backgroundColor: AppColors.background, diff --git a/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart b/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart index e9768c1..51f14b5 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_drawer_body.dart @@ -13,15 +13,21 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/svg.dart'; -class HomeScreenDrawerBody extends StatelessWidget { +class HomeScreenDrawerBody extends ConsumerStatefulWidget { const HomeScreenDrawerBody({super.key}); + @override + ConsumerState createState() => _HomeScreenDrawerBodyState(); +} + +class _HomeScreenDrawerBodyState extends ConsumerState { + @override Widget build(BuildContext context) { ///Drawer for Home Screen return Padding( - padding: EdgeInsets.all(8.0.w), + padding: EdgeInsets.all(8.0.r), child: ListView.separated( shrinkWrap: true, physics: const BouncingScrollPhysics(), @@ -49,6 +55,7 @@ class HomeScreenDrawerBody extends StatelessWidget { ), ); } else if (index == 3) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -58,6 +65,7 @@ class HomeScreenDrawerBody extends StatelessWidget { ), ); } else if (index == 5) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -67,6 +75,7 @@ class HomeScreenDrawerBody extends StatelessWidget { ), ); } else if (index == 6) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -76,6 +85,7 @@ class HomeScreenDrawerBody extends StatelessWidget { ), ); } else if (index == 9) { + homeScreenDrawerWatch.setOrIncrementId(newId: index); Navigator.push( context, MaterialPageRoute( @@ -85,6 +95,7 @@ class HomeScreenDrawerBody extends StatelessWidget { ), ); } else { + homeScreenDrawerWatch.setOrIncrementId(newId: 0); Navigator.push( context, MaterialPageRoute( diff --git a/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart b/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart index cdca134..b133f17 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_featured_collection_list.dart @@ -9,6 +9,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; class HomeScreenFeaturedCollectionList extends StatelessWidget { const HomeScreenFeaturedCollectionList({super.key}); + final int count = 10; + @override Widget build(BuildContext context) { return SizedBox( @@ -25,25 +27,22 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { SizedBox( width: 0.9.sw, child: Row( + mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ index == 0 - ? const CommonTitle( - text: AppStrings.keyFeaturedCollection) + ? const CommonTitle(text: AppStrings.keyFeaturedCollection) : const Text(''), RichText( text: TextSpan( text: index < 9 ? '0${index + 1}' : '${index + 1}', - style: TextStyles.regular.copyWith( - color: AppColors.primary, - overflow: TextOverflow.ellipsis, - ), + style: TextStyles.regular + .copyWith(color: AppColors.primary), children: [ TextSpan( - text: '/10', - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - overflow: TextOverflow.ellipsis), + text: '/$count', + style: TextStyles.regular + .copyWith(color: AppColors.greyText), ), ], ), @@ -53,11 +52,9 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { ), Expanded( child: Padding( - padding: EdgeInsets.all(16.0.w), + padding: const EdgeInsets.all(16.0), child: Image.asset( - index == 1 - ? '${AppAssets.imgLocation}card_1.png' - : '${AppAssets.imgLocation}card_0.png', + index == 1 ?'${AppAssets.imgLocation}card_1.png' :'${AppAssets.imgLocation}card_0.png', width: 178.w, height: 300.h, fit: BoxFit.contain, @@ -71,6 +68,7 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( @@ -78,12 +76,9 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { child: Text( AppStrings.key1993, softWrap: true, - overflow: TextOverflow.ellipsis, maxLines: 2, - style: TextStyles.regular.copyWith( - color: AppColors.white, - fontSize: 16.sp, - ), + style: TextStyles.regular + .copyWith(color: AppColors.white, fontSize: 16), ), ), ], @@ -92,18 +87,13 @@ class HomeScreenFeaturedCollectionList extends StatelessWidget { children: [ Text( 'PSA 5', - overflow: TextOverflow.ellipsis, - style: TextStyles.regular.copyWith( - color: AppColors.golden, - fontSize: 16.sp, - ), + style: TextStyles.regular + .copyWith(color: AppColors.golden, fontSize: 16), ), Text( '\$300.10', - overflow: TextOverflow.ellipsis, - style: TextStyles.regular.copyWith( - color: AppColors.primary, - ), + style: TextStyles.regular + .copyWith(color: AppColors.primary), ), ], ) diff --git a/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart b/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart index 55a22f2..9fec087 100644 --- a/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart +++ b/lib/ui/home_screen/mobile/helper/home_screen_profiles.dart @@ -10,48 +10,47 @@ class HomeScreenProfiles extends StatelessWidget { @override Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 6.0), - height: 120.h, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemBuilder: (context, index) { - return Padding( - padding: EdgeInsets.all(8.0.w), - child: Column( - children: [ - Flexible( - child: SizedBox( - width: 56.w, - height: 56.h, - child: CircleAvatar( - radius: 50.r, - backgroundImage: AssetImage( - '${AppAssets.imgLocation}profile_${index % 5}.png'), + return + Container( + padding: + const EdgeInsets.symmetric(horizontal: 8.0, vertical: 6.0), + height: 120.h, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + Flexible( + child: SizedBox( + width: 56.w, + height: 56.h, + child: CircleAvatar( + radius: 50, + backgroundImage: AssetImage( + '${AppAssets.imgLocation}profile_${index % 5}.png'), + ), ), ), - ), - Flexible( - child: SizedBox( - width: 56.w, - child: Text( - AppStrings.profiles[index % 5], - textAlign: TextAlign.center, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - fontSize: 12.sp, + Flexible( + child: SizedBox( + width: 56.w, + child: Text( + AppStrings.profiles[index % 5], + textAlign: TextAlign.center, + maxLines: 2, + style: TextStyles.regular + .copyWith(color: AppColors.greyText,fontSize: 12.sp), ), ), ), - ), - ], - ), - ); - }, - itemCount: 10, - ), - ); + ], + ), + ); + }, + itemCount: 10, + ), + ); } } diff --git a/lib/ui/home_screen/mobile/home_screen_mobile.dart b/lib/ui/home_screen/mobile/home_screen_mobile.dart index 143f4a1..0283f5a 100644 --- a/lib/ui/home_screen/mobile/home_screen_mobile.dart +++ b/lib/ui/home_screen/mobile/home_screen_mobile.dart @@ -1,8 +1,8 @@ +import 'package:cardtrading/framework/controllers/home_screen/home_screen_controller.dart'; import 'package:cardtrading/ui/card_shop/card_shop.dart'; +import 'package:cardtrading/ui/checkout/checkout.dart'; import 'package:cardtrading/ui/featured_seller/featured_seller.dart'; -import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_app_bar_actions.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_bottom_navigation_bar.dart'; -import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_card_grid.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_description.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_divider.dart'; import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; @@ -11,37 +11,63 @@ import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_profiles.da import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; +import 'package:cardtrading/ui/utils/widget/shop_card.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; + import 'helper/home_screen_banner.dart'; -class HomeScreenMobile extends StatelessWidget { +class HomeScreenMobile extends ConsumerStatefulWidget { const HomeScreenMobile({super.key}); + @override + ConsumerState createState() => _HomeScreenMobileState(); +} + +class _HomeScreenMobileState extends ConsumerState { + final GlobalKey _globalKey = GlobalKey(); + @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - - ///Common App Bar - appBar: CommonAppBar( + key: _globalKey, + appBar: AppBar( backgroundColor: AppColors.background, leading: IconButton( icon: SvgPicture.asset('${AppAssets.svgLocation}menu.svg'), onPressed: () { - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (context) { - return const HomeScreenDrawer(); - }, - ), - ); + _globalKey.currentState!.openDrawer(); }, ), - actions: const [ - HomeScreenAppBarActions(), + actions: [ + ...List.generate( + 3, + (index) { + final homeScreenWatch = ref.watch(homeScreenController); + return InkWell( + onTap: () { + if (index == 1) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const Checkout(); + }, + ), + ); + } + }, + child: Padding( + padding: const EdgeInsets.all(6.0), + child: + SvgPicture.asset(homeScreenWatch.appBarActionList[index]), + ), + ); + }, + ), ], ), drawer: const HomeScreenDrawer(), @@ -86,7 +112,26 @@ class HomeScreenMobile extends StatelessWidget { ); }, ), - const HomeScreenCardsGrid(), + Container( + width: 0.9.sw, + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: GridView.builder( + physics: const NeverScrollableScrollPhysics(), + itemCount: 6, + shrinkWrap: true, + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + mainAxisSpacing: 2, + crossAxisSpacing: 1, + crossAxisCount: 2, + childAspectRatio: 0.5, + ), + itemBuilder: (context, index) { + return ShopCard( + index: index, + ); + }, + ), + ), ], ), ), diff --git a/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart b/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart index 1fc6bd1..4d5171d 100644 --- a/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart +++ b/lib/ui/onboarding/mobile/helper/onboarding_next_button.dart @@ -5,7 +5,8 @@ import 'package:cardtrading/ui/utils/widget/common_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:cardtrading/framework/controllers/onboarding/onboarding_controller.dart'; + +import '../../../../framework/controllers/onboarding/onboarding_controller.dart'; class OnBoardingNextButton extends StatelessWidget { const OnBoardingNextButton({super.key}); diff --git a/lib/ui/onboarding/mobile/onboarding_mobile.dart b/lib/ui/onboarding/mobile/onboarding_mobile.dart index 7130eed..4ae4e6b 100644 --- a/lib/ui/onboarding/mobile/onboarding_mobile.dart +++ b/lib/ui/onboarding/mobile/onboarding_mobile.dart @@ -4,6 +4,7 @@ import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_page_indicato import 'package:cardtrading/ui/onboarding/mobile/helper/onboarding_skip_button.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class OnBoardingMobile extends StatelessWidget { @@ -13,30 +14,43 @@ class OnBoardingMobile extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - body: Padding( - padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), - child: Column( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 25.h, - ), - ///Skip Button - const SkipButton(), - ///space left out for animation - const OnBoardingCenterWidget(), - ///Page Indicator Boxes - const OnBoardingPageIndicator(), - ], - ), + body: Consumer( + builder: (BuildContext context, WidgetRef ref, Widget? child) { + return _bodyWidget(context); + }, + ), + ); + } + + ///Body Widget + Widget _bodyWidget(BuildContext context) { + return Padding( + padding: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 30.h), + child: Column( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 25.h, + ), + + ///Skip Button + const SkipButton(), + + ///space left out for animation will implement when I get json file from designer + const OnBoardingCenterWidget(), + + ///Page Indicator Boxes + const OnBoardingPageIndicator(), + ], ), - ///Display Common Button on first 2 pages and Slider on 3rd page - const OnBoardingBottomButton(), - ], - ), + ), + + ///Display Common Button on first 2 pages and Slider on 3rd page + const OnBoardingBottomButton(), + ], ), ); } diff --git a/lib/ui/splashscreen/mobile/helper/splash_body.dart b/lib/ui/splashscreen/mobile/helper/splash_body.dart index 27af8e1..8fb5dfd 100644 --- a/lib/ui/splashscreen/mobile/helper/splash_body.dart +++ b/lib/ui/splashscreen/mobile/helper/splash_body.dart @@ -2,10 +2,10 @@ import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; - class SplashBody extends StatelessWidget { - const SplashBody({super.key}); + const SplashBody({ + super.key, + }); @override Widget build(BuildContext context) { @@ -17,14 +17,14 @@ class SplashBody extends StatelessWidget { AppStrings.keyCard, style: TextStyles.bold.copyWith( color: AppColors.primary, - fontSize: 50.sp, + fontSize: 50, ), ), Text( AppStrings.keyBuyAndSell, style: TextStyles.medium.copyWith( color: AppColors.white, - fontSize: 16.sp, + fontSize: 16 ), ), ], diff --git a/lib/ui/subscription_plan/mobile/helper/basic_subscription_card.dart b/lib/ui/subscription_plan/mobile/helper/basic_subscription_card.dart new file mode 100644 index 0000000..c6fd2ed --- /dev/null +++ b/lib/ui/subscription_plan/mobile/helper/basic_subscription_card.dart @@ -0,0 +1,43 @@ +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/material.dart'; + +class BasicSubscriptionCard extends StatelessWidget { + const BasicSubscriptionCard({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SubscriptionPlanCard( + subscriptionPlan: AppStrings.keyBasicSubscriptionPlan, + planBenefits: AppStrings.keyBasicPlanBenefits, + url: '${AppAssets.svgLocation}silver.svg', + borderColor: AppColors.cardSilver, + planKd: AppStrings.keyBasicKd, + subscriptionPlanOne: AppStrings.keyBasicConditionOne, + subscriptionPlanTwo: AppStrings.keyBasicConditionTwo, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return SubscriptionPlanScreen( + url: '${AppAssets.svgLocation}silver.svg', + cardLimitOne: AppStrings.keyBasicCardDetailsOne, + cardLimitTwo: AppStrings.keyBasicCardDetailsTwo, + cardLimitThree: AppStrings.keyBasicCardDetailsThree, + rewardPointOne: AppStrings.keyBasicRewardsPointsOne, + rewardPointTwo: AppStrings.keyBasicRewardsPointsTwo, + rewardPointThree: AppStrings.keyBasicRewardsPointsThree, + ); + }, + ), + ); + }, + ); + } +} diff --git a/lib/ui/subscription_plan/mobile/helper/elite_subscription_card.dart b/lib/ui/subscription_plan/mobile/helper/elite_subscription_card.dart new file mode 100644 index 0000000..5c25847 --- /dev/null +++ b/lib/ui/subscription_plan/mobile/helper/elite_subscription_card.dart @@ -0,0 +1,46 @@ +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/material.dart'; + +class EliteSubscriptionCard extends StatelessWidget { + const EliteSubscriptionCard({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SubscriptionPlanCard( + subscriptionPlan: AppStrings.keyEliteSubscriptionPlan, + planBenefits: AppStrings.keyElitePlanBenefits, + url: '${AppAssets.svgLocation}golden.svg', + borderColor: AppColors.cardGolden, + planKd: AppStrings.keyEliteKd, + subscriptionPlanOne: AppStrings.keyEliteConditionOne, + subscriptionPlanTwo: AppStrings.keyEliteConditionTwo, + subscriptionPlanThree: AppStrings.keyEliteConditionThree, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return SubscriptionPlanScreen( + url: '${AppAssets.svgLocation}golden.svg', + cardLimitOne: AppStrings.keyEliteCardDetailsOne, + cardLimitTwo: AppStrings.keyEliteCardDetailsTwo, + cardLimitThree: AppStrings.keyEliteCardDetailsThree, + rewardPointOne: AppStrings.keyEliteRewardsPointsOne, + rewardPointTwo: AppStrings.keyEliteRewardsPointsTwo, + rewardPointThree: AppStrings.keyEliteRewardsPointsThree, + verifiedBadgeOne: AppStrings.keyEliteVerifiedBadgeOne, + verifiedBadgeTwo: AppStrings.keyEliteVerifiedBadgeTwo, + ); + }, + ), + ); + }, + ); + } +} diff --git a/lib/ui/subscription_plan/mobile/helper/premium_subscription_card.dart b/lib/ui/subscription_plan/mobile/helper/premium_subscription_card.dart new file mode 100644 index 0000000..a29eac1 --- /dev/null +++ b/lib/ui/subscription_plan/mobile/helper/premium_subscription_card.dart @@ -0,0 +1,44 @@ +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; +import 'package:cardtrading/ui/utils/theme/assets.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:flutter/material.dart'; +class PremiumSubscriptionCard extends StatelessWidget { + const PremiumSubscriptionCard({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SubscriptionPlanCard( + subscriptionPlan: AppStrings.keyPremiumSubscriptionPlan, + planBenefits: AppStrings.keyPremiumPlanBenefits, + url: '${AppAssets.svgLocation}bronze.svg', + borderColor: AppColors.cardBronze, + planKd: AppStrings.keyPremiumKd, + subscriptionPlanOne: AppStrings.keyPremiumConditionOne, + subscriptionPlanTwo: AppStrings.keyPremiumConditionTwo, + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return SubscriptionPlanScreen( + url: '${AppAssets.svgLocation}bronze.svg', + cardLimitOne: AppStrings.keyPremiumCardDetailsOne, + cardLimitTwo: AppStrings.keyPremiumCardDetailsTwo, + cardLimitThree: AppStrings.keyPremiumCardDetailsThree, + rewardPointOne: AppStrings.keyPremiumRewardsPointsOne, + rewardPointTwo: AppStrings.keyPremiumRewardsPointsTwo, + rewardPointThree: + AppStrings.keyPremiumRewardsPointsThree, + ); + }, + ), + ); + }, + ); + } +} + diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_body.dart b/lib/ui/subscription_plan/mobile/helper/subscription_body.dart new file mode 100644 index 0000000..1f4633c --- /dev/null +++ b/lib/ui/subscription_plan/mobile/helper/subscription_body.dart @@ -0,0 +1,56 @@ +import 'package:cardtrading/ui/subscription_plan/mobile/helper/basic_subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/elite_subscription_card.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/premium_subscription_card.dart'; +import 'package:cardtrading/ui/utils/theme/colors.dart'; +import 'package:cardtrading/ui/utils/theme/my_strings.dart'; +import 'package:cardtrading/ui/utils/theme/text_style.dart'; +import 'package:cardtrading/ui/utils/widget/common_title.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class SubscriptionBody extends StatelessWidget { + const SubscriptionBody({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + padding: const EdgeInsets.all(20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// + CommonTitle( + text: AppStrings.keyChooseYourPlan, + tStyle: TextStyles.regular + .copyWith(fontFamily: 'Sora', color: AppColors.golden), + align: TextAlign.start, + ), + SizedBox( + height: 10.h, + ), + Text( + AppStrings.keyTermsAndConditionDescription, + style: TextStyles.regular.copyWith( + color: AppColors.greyText, + fontSize: 12.sp, + ), + ), + SizedBox( + height: 20.h, + ), + const EliteSubscriptionCard(), + SizedBox( + height: 20.h, + ), + const BasicSubscriptionCard(), + SizedBox( + height: 20.h, + ), + const PremiumSubscriptionCard(), + ], + ), + ); + } +} diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_card.dart b/lib/ui/subscription_plan/mobile/helper/subscription_card.dart index 41e0ba7..b2fa80d 100644 --- a/lib/ui/subscription_plan/mobile/helper/subscription_card.dart +++ b/lib/ui/subscription_plan/mobile/helper/subscription_card.dart @@ -60,7 +60,6 @@ class SubscriptionPlanCard extends StatelessWidget { style: TextStyles.regular.copyWith( fontFamily: 'Sora', fontSize: 12.sp, - overflow: TextOverflow.ellipsis, color: AppColors.greyText, ), ), @@ -71,7 +70,6 @@ class SubscriptionPlanCard extends StatelessWidget { planBenefits, style: TextStyles.extraLight.copyWith( fontSize: 10.sp, - overflow: TextOverflow.ellipsis, fontFamily: 'Sora', color: AppColors.greyText, ), @@ -85,7 +83,6 @@ class SubscriptionPlanCard extends StatelessWidget { fontSize: 10, fontFamily: 'Sora', color: AppColors.primary, - overflow: TextOverflow.ellipsis, ), ), const Divider( @@ -99,7 +96,6 @@ class SubscriptionPlanCard extends StatelessWidget { planKd, style: TextStyles.bold.copyWith( fontFamily: 'Sora', - overflow: TextOverflow.ellipsis, fontSize: 26.sp, color: borderColor, ), @@ -120,7 +116,6 @@ class SubscriptionPlanCard extends StatelessWidget { ), Text( subscriptionPlanOne, - overflow: TextOverflow.ellipsis, style: TextStyles.light.copyWith( fontSize: 12.sp, fontFamily: 'Sora', @@ -147,7 +142,6 @@ class SubscriptionPlanCard extends StatelessWidget { subscriptionPlanTwo, style: TextStyles.light.copyWith( fontSize: 12.sp, - overflow: TextOverflow.ellipsis, fontFamily: 'Sora', color: AppColors.containerText, ), @@ -196,18 +190,18 @@ class SubscriptionPlanCard extends StatelessWidget { ), child: Row( mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( AppStrings.keyBuyNow, style: TextStyles.semiBold.copyWith( fontFamily: 'Sora', fontSize: 14.sp, - overflow: TextOverflow.ellipsis, color: AppColors.dividerColor, ), ), Padding( - padding: EdgeInsets.all(8.0.w), + padding: const EdgeInsets.all(8.0), child: SvgPicture.asset( '${AppAssets.svgLocation}arrow.svg', width: 14.w, diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart b/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart deleted file mode 100644 index db8f8bc..0000000 --- a/lib/ui/subscription_plan/mobile/helper/subscription_plan_body.dart +++ /dev/null @@ -1,139 +0,0 @@ - -import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_card.dart'; -import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_screen.dart'; -import 'package:cardtrading/ui/utils/theme/assets.dart'; -import 'package:cardtrading/ui/utils/theme/colors.dart'; -import 'package:cardtrading/ui/utils/theme/my_strings.dart'; -import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_title.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_screenutil/flutter_screenutil.dart'; - -class SubscriptionPlanBody extends StatelessWidget { - const SubscriptionPlanBody({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return SingleChildScrollView( - padding: const EdgeInsets.all(20.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - /// - CommonTitle( - text: AppStrings.keyChooseYourPlan, - tStyle: TextStyles.regular - .copyWith(fontFamily: 'Sora', color: AppColors.golden), - align: TextAlign.start, - ), - SizedBox( - height: 10.h, - ), - Text( - AppStrings.keyTermsAndConditionDescription, - style: TextStyles.regular.copyWith( - color: AppColors.greyText, - fontSize: 12.sp, - overflow: TextOverflow.ellipsis - ), - ), - SizedBox( - height: 20.h, - ), - SubscriptionPlanCard( - subscriptionPlan: AppStrings.keyEliteSubscriptionPlan, - planBenefits: AppStrings.keyElitePlanBenefits, - url: '${AppAssets.svgLocation}golden.svg', - borderColor: AppColors.cardGolden, - planKd: AppStrings.keyEliteKd, - subscriptionPlanOne: AppStrings.keyEliteConditionOne, - subscriptionPlanTwo: AppStrings.keyEliteConditionTwo, - subscriptionPlanThree: AppStrings.keyEliteConditionThree, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return SubscriptionPlanScreen( - url: '${AppAssets.svgLocation}golden.svg', - cardLimitOne: AppStrings.keyEliteCardDetailsOne, - cardLimitTwo: AppStrings.keyEliteCardDetailsTwo, - cardLimitThree: AppStrings.keyEliteCardDetailsThree, - rewardPointOne: AppStrings.keyEliteRewardsPointsOne, - rewardPointTwo: AppStrings.keyEliteRewardsPointsTwo, - rewardPointThree: AppStrings.keyEliteRewardsPointsThree, - verifiedBadgeOne: AppStrings.keyEliteVerifiedBadgeOne, - verifiedBadgeTwo: AppStrings.keyEliteVerifiedBadgeTwo, - ); - }, - ), - ); - }, - ), - SizedBox( - height: 20.h, - ), - SubscriptionPlanCard( - subscriptionPlan: AppStrings.keyBasicSubscriptionPlan, - planBenefits: AppStrings.keyBasicPlanBenefits, - url: '${AppAssets.svgLocation}silver.svg', - borderColor: AppColors.cardSilver, - planKd: AppStrings.keyBasicKd, - subscriptionPlanOne: AppStrings.keyBasicConditionOne, - subscriptionPlanTwo: AppStrings.keyBasicConditionTwo, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return SubscriptionPlanScreen( - url: '${AppAssets.svgLocation}silver.svg', - cardLimitOne: AppStrings.keyBasicCardDetailsOne, - cardLimitTwo: AppStrings.keyBasicCardDetailsTwo, - cardLimitThree: AppStrings.keyBasicCardDetailsThree, - rewardPointOne: AppStrings.keyBasicRewardsPointsOne, - rewardPointTwo: AppStrings.keyBasicRewardsPointsTwo, - rewardPointThree: AppStrings.keyBasicRewardsPointsThree, - ); - }, - ), - ); - }, - ), - SizedBox( - height: 20.h, - ), - SubscriptionPlanCard( - subscriptionPlan: AppStrings.keyPremiumSubscriptionPlan, - planBenefits: AppStrings.keyPremiumPlanBenefits, - url: '${AppAssets.svgLocation}bronze.svg', - borderColor: AppColors.cardBronze, - planKd: AppStrings.keyPremiumKd, - subscriptionPlanOne: AppStrings.keyPremiumConditionOne, - subscriptionPlanTwo: AppStrings.keyPremiumConditionTwo, - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) { - return SubscriptionPlanScreen( - url: '${AppAssets.svgLocation}bronze.svg', - cardLimitOne: AppStrings.keyPremiumCardDetailsOne, - cardLimitTwo: AppStrings.keyPremiumCardDetailsTwo, - cardLimitThree: AppStrings.keyPremiumCardDetailsThree, - rewardPointOne: AppStrings.keyPremiumRewardsPointsOne, - rewardPointTwo: AppStrings.keyPremiumRewardsPointsTwo, - rewardPointThree: AppStrings.keyPremiumRewardsPointsThree, - ); - }, - ), - ); - }, - ), - ], - ), - ); - } -} diff --git a/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart b/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart index 1d74701..abf54dc 100644 --- a/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart +++ b/lib/ui/subscription_plan/mobile/helper/subscription_screen.dart @@ -2,7 +2,6 @@ import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; import 'package:cardtrading/ui/utils/theme/text_style.dart'; -import 'package:cardtrading/ui/utils/widget/common_appbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -35,7 +34,7 @@ class SubscriptionPlanScreen extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: CommonAppBar( + appBar: AppBar( backgroundColor: AppColors.background, leading: IconButton( onPressed: () { @@ -45,19 +44,20 @@ class SubscriptionPlanScreen extends StatelessWidget { Icons.arrow_back_outlined, ), ), - titleWidget: Text( + title: Text( AppStrings.keyTermsAndCondition, style: TextStyles.bold.copyWith( fontSize: 16.sp, color: AppColors.white, ), ), - isTitleCentered: true, + centerTitle: true, ), body: Padding( - padding: EdgeInsets.all(20.0.w), + padding: const EdgeInsets.all(20), child: SingleChildScrollView( child: Column( + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ SvgPicture.asset( @@ -72,7 +72,6 @@ class SubscriptionPlanScreen extends StatelessWidget { AppStrings.keyCardLimit, style: TextStyles.medium.copyWith( color: AppColors.white, - overflow: TextOverflow.ellipsis, ), ), SizedBox( @@ -153,26 +152,12 @@ class SubscriptionPlanScreen extends StatelessWidget { } Widget _text(String text) { - return SubscriptionPlanText(starSvgPath: starSvgPath,text: text,); - } -} - -class SubscriptionPlanText extends StatelessWidget { - const SubscriptionPlanText({ - super.key, - required this.starSvgPath, required this.text, - }); - - final String starSvgPath; - final String text; - - @override - Widget build(BuildContext context) { return Row( + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.symmetric(vertical: 4.0.h), + padding: const EdgeInsets.symmetric(vertical: 4.0), child: SvgPicture.asset( starSvgPath, width: 10.w, @@ -190,7 +175,6 @@ class SubscriptionPlanText extends StatelessWidget { style: TextStyles.light.copyWith( fontSize: 12.sp, color: AppColors.greyText, - overflow: TextOverflow.ellipsis, ), ), ), diff --git a/lib/ui/subscription_plan/mobile/subscription_mobile.dart b/lib/ui/subscription_plan/mobile/subscription_mobile.dart index 6de464b..d7a39f7 100644 --- a/lib/ui/subscription_plan/mobile/subscription_mobile.dart +++ b/lib/ui/subscription_plan/mobile/subscription_mobile.dart @@ -1,5 +1,5 @@ import 'package:cardtrading/ui/home_screen/mobile/helper/home_screen_drawer.dart'; -import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_plan_body.dart'; +import 'package:cardtrading/ui/subscription_plan/mobile/helper/subscription_body.dart'; import 'package:cardtrading/ui/utils/theme/assets.dart'; import 'package:cardtrading/ui/utils/theme/colors.dart'; import 'package:cardtrading/ui/utils/theme/my_strings.dart'; @@ -12,19 +12,16 @@ import 'package:flutter_svg/flutter_svg.dart'; class SubscriptionMobile extends StatelessWidget { const SubscriptionMobile({super.key}); - @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, - appBar: CommonAppBar( - backgroundColor: AppColors.background, leading: IconButton( icon: SvgPicture.asset('${AppAssets.svgLocation}menu.svg'), onPressed: () { - Navigator.pushReplacement( + Navigator.push( context, MaterialPageRoute( builder: (context) { @@ -45,7 +42,7 @@ class SubscriptionMobile extends StatelessWidget { isTitleCentered: true, ), drawer: const HomeScreenDrawer(), - body: const SubscriptionPlanBody(), + body: const SubscriptionBody(), ); } } diff --git a/lib/ui/utils/theme/my_strings.dart b/lib/ui/utils/theme/my_strings.dart index c9ad19c..7067aaa 100644 --- a/lib/ui/utils/theme/my_strings.dart +++ b/lib/ui/utils/theme/my_strings.dart @@ -106,7 +106,6 @@ class AppStrings { static const keyBasicPlanBenefits = 'Access To Essential Features For Trading Cards.'; static const keyCompleteYourProfile = 'Complete Your Profile'; - static const keyAddAddress = 'Add Address'; static const keyCompleteYourProfileContent = 'Please Enter Your Personal Detail By That Verify Your Date And Move Further.'; static const keyEnterYourPersonalDetails = 'Enter Your Personal Details Here'; @@ -116,6 +115,7 @@ class AppStrings { static const keyBuilding = 'Building'; static const keyFloor = 'Floor'; static const keyHouseNo = 'House No*'; + static const keyAddAddress = 'Add Address'; static const keyEnterReferral = 'Enter your Referral Code'; static const keyApply = 'Apply'; static const keyHaveReferral = 'I Have A Referral Code.'; diff --git a/lib/ui/utils/widget/common_button.dart b/lib/ui/utils/widget/common_button.dart index 0994676..80426fb 100644 --- a/lib/ui/utils/widget/common_button.dart +++ b/lib/ui/utils/widget/common_button.dart @@ -62,7 +62,6 @@ class CommonButton extends StatelessWidget { TextStyles.semiBold.copyWith( fontSize: buttonFontSize ?? 16.sp, color: AppColors.selectedButtonText, - overflow: TextOverflow.ellipsis ), ), ), diff --git a/lib/ui/utils/widget/common_paragraph.dart b/lib/ui/utils/widget/common_paragraph.dart index 9103e04..0eb87b9 100644 --- a/lib/ui/utils/widget/common_paragraph.dart +++ b/lib/ui/utils/widget/common_paragraph.dart @@ -10,7 +10,7 @@ class CommonParagraph extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.symmetric(horizontal: 20.0.w), + padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -27,7 +27,6 @@ class CommonParagraph extends StatelessWidget { Text( AppStrings.keyCommonParagraphContent, softWrap: true, - overflow: TextOverflow.ellipsis, style: TextStyles.light.copyWith( fontSize: 12.sp, fontFamily: 'Sora', diff --git a/lib/ui/utils/widget/common_title.dart b/lib/ui/utils/widget/common_title.dart index a70283b..2b7f8c2 100644 --- a/lib/ui/utils/widget/common_title.dart +++ b/lib/ui/utils/widget/common_title.dart @@ -17,7 +17,6 @@ class CommonTitle extends StatelessWidget { text, textAlign: align, maxLines: 3, - overflow: TextOverflow.ellipsis, style: TextStyle( fontFamily: TextStyles.fontFamily, fontSize: fontSize.sp, diff --git a/lib/ui/utils/widget/shop_card.dart b/lib/ui/utils/widget/shop_card.dart index d78c2b9..e6a2e89 100644 --- a/lib/ui/utils/widget/shop_card.dart +++ b/lib/ui/utils/widget/shop_card.dart @@ -24,7 +24,8 @@ class ShopCard extends StatelessWidget { MaterialPageRoute( builder: (context) { return CardDetails( - url: '${AppAssets.imgLocation}card_${index % 4}.png'); + url: + '${AppAssets.imgLocation}card_${index % 4}.png'); }, ), ); @@ -51,26 +52,26 @@ class ShopCard extends StatelessWidget { .copyWith(color: Colors.black, fontSize: 12.sp), ), ), - Consumer(builder: - (BuildContext context, WidgetRef ref, Widget? widget) { - return IconButton( - iconSize: 24, - padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), - onPressed: () { - ref.watch(shopCardController).favourite(); - }, - icon: Icon( - ref.watch(shopCardController).isFavourite - ? Icons.favorite - : Icons.favorite_border, - color: AppColors.primary, - ), - ); - }), + Consumer( + builder: (BuildContext context,WidgetRef ref,Widget? widget) { + return IconButton( + iconSize: 24, + padding: const EdgeInsets.fromLTRB(8.0, 0.0, 0.0, 0.0), + onPressed: () { + ref.watch(shopCardController).favourite(); + }, + icon: Icon( + ref.watch(shopCardController).isFavourite + ? Icons.favorite + : Icons.favorite_border, + color: AppColors.primary, + ), + ); + } + ), Text( AppStrings.keyCardLikesCount, style: TextStyles.regular, - overflow: TextOverflow.fade, ), ], ), @@ -96,17 +97,13 @@ class ShopCard extends StatelessWidget { overflow: TextOverflow.ellipsis, maxLines: 2, softWrap: true, - style: TextStyles.regular - .copyWith(fontSize: 12.sp, overflow: TextOverflow.ellipsis), + style: TextStyles.regular.copyWith(fontSize: 12.sp), ), ), Text( AppStrings.keyCardPrice, textAlign: TextAlign.center, - style: TextStyles.semiBold.copyWith( - color: AppColors.primary, - overflow: TextOverflow.ellipsis, - ), + style: TextStyles.semiBold.copyWith(color: AppColors.primary), ), SizedBox( height: 8.h, From fae797c2e01f81c4e4d89d94f14c73c2053b5bcd Mon Sep 17 00:00:00 2001 From: uveshmenpur Date: Tue, 19 Sep 2023 11:24:22 +0530 Subject: [PATCH 7/8] done --- analysis_options.yaml | 4 ++-- lib/ui/subscription_plan/subscription.dart | 1 + pubspec.yaml | 7 ------- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 61b6c4d..77a6780 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -22,8 +22,8 @@ linter: # `// ignore_for_file: name_of_lint` syntax on the line or in the file # producing the lint. rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + avoid_print: false # Uncomment to disable the `avoid_print` rule + prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule # Additional information about this file can be found at # https://dart.dev/guides/language/analysis-options diff --git a/lib/ui/subscription_plan/subscription.dart b/lib/ui/subscription_plan/subscription.dart index 55b53ef..fb5fc8e 100644 --- a/lib/ui/subscription_plan/subscription.dart +++ b/lib/ui/subscription_plan/subscription.dart @@ -15,3 +15,4 @@ class Subscription extends StatelessWidget { }); } } + diff --git a/pubspec.yaml b/pubspec.yaml index 2b20c20..98950e4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,6 @@ dependencies: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 @@ -102,11 +101,5 @@ flutter: - asset: assets/fonts/Sora/Sora-Medium.ttf - asset: assets/fonts/Sora/Sora-Regular.ttf - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # # For details regarding fonts from package dependencies, # see https://flutter.dev/custom-fonts/#from-packages From 19823202717903efeeacb339b639819bb05e9322 Mon Sep 17 00:00:00 2001 From: sagar bagsariya Date: Thu, 20 Jun 2024 17:55:31 +0530 Subject: [PATCH 8/8] Update onboarding_slider_button.dart --- .../onboarding/mobile/helper/onboarding_slider_button.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart b/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart index 9c6d552..99850e6 100644 --- a/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart +++ b/lib/ui/onboarding/mobile/helper/onboarding_slider_button.dart @@ -22,9 +22,9 @@ class OnBoardingSliderButton extends StatelessWidget { return SliderButton( backgroundColor: AppColors.background, width: double.infinity, - action: () { + action: () async { onBoardingWatch.changePage(0); - Navigator.pushReplacement( + await Navigator.pushReplacement( context, MaterialPageRoute( builder: (BuildContext context) { @@ -32,6 +32,7 @@ class OnBoardingSliderButton extends StatelessWidget { }, ), ); + return true; }, alignLabel: Alignment.center, highlightedColor: AppColors.primary,