diff --git a/assets/images/wallet_screen/1.png b/assets/images/wallet_screen/1.png new file mode 100644 index 0000000..df2fd8d Binary files /dev/null and b/assets/images/wallet_screen/1.png differ diff --git a/assets/images/wallet_screen/2.png b/assets/images/wallet_screen/2.png new file mode 100644 index 0000000..63eddc3 Binary files /dev/null and b/assets/images/wallet_screen/2.png differ diff --git a/assets/images/wallet_screen/3.png b/assets/images/wallet_screen/3.png new file mode 100644 index 0000000..09406b5 Binary files /dev/null and b/assets/images/wallet_screen/3.png differ diff --git a/assets/images/wallet_screen/4.png b/assets/images/wallet_screen/4.png new file mode 100644 index 0000000..e78aef6 Binary files /dev/null and b/assets/images/wallet_screen/4.png differ diff --git a/assets/images/wallet_screen/done.png b/assets/images/wallet_screen/done.png new file mode 100644 index 0000000..ab8da3a Binary files /dev/null and b/assets/images/wallet_screen/done.png differ diff --git a/assets/images/wallet_screen/info.png b/assets/images/wallet_screen/info.png new file mode 100644 index 0000000..e7fabcd Binary files /dev/null and b/assets/images/wallet_screen/info.png differ diff --git a/lib/core/routes/route_name.dart b/lib/core/routes/route_name.dart index ce41194..6caa377 100644 --- a/lib/core/routes/route_name.dart +++ b/lib/core/routes/route_name.dart @@ -34,6 +34,9 @@ class RouteName { //Wallet details static const String walletDetails = 'walletDetails'; + static const String withdrawalScreen = 'withdrawalScreen'; + static const String withdrawalPreview = 'withdrawalPreview'; + static const String withdrawalConfirmation = 'withdrawalConfirmation'; //Biometric static const String biometricScreen = 'biometricScreen'; diff --git a/lib/core/routes/routes.dart b/lib/core/routes/routes.dart index 20949e4..f82d1d7 100644 --- a/lib/core/routes/routes.dart +++ b/lib/core/routes/routes.dart @@ -7,6 +7,9 @@ import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/invest import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/payment/invest_payment_screen.dart'; import 'package:tanami_app/features/MainScreens/Portfolio/presentation/pages/portfolio_details_screen.dart'; import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/walletDetails.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/confirmation.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/preview.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart'; import 'package:tanami_app/features/biometric/presentation/pages/biometric_screen.dart'; import 'package:tanami_app/features/changePassword/presentation/pages/change_password_screen.dart'; import 'package:tanami_app/features/contactAdmin/presentation/pages/contact_admin_screen.dart'; @@ -164,6 +167,27 @@ final goRouter = GoRouter( type: state.pathParameters["type"]!, ); }), + GoRoute( + name: RouteName.withdrawalScreen, + path: RouteName.withdrawalScreen, + builder: (context, state) { + return const WithdrawalScreen(); + }, + ), + GoRoute( + name: RouteName.withdrawalPreview, + path: RouteName.withdrawalPreview, + builder: (context, state) { + return const WithdrawalPreview(); + }, + ), + GoRoute( + name: RouteName.withdrawalConfirmation, + path: RouteName.withdrawalConfirmation, + builder: (context, state) { + return const WithdrawalConfirmation(); + }, + ), GoRoute( name: RouteName.contactAdminScreen, path: RouteName.contactAdminScreen, diff --git a/lib/core/styles/app_images.dart b/lib/core/styles/app_images.dart index 1d49b22..2f31339 100644 --- a/lib/core/styles/app_images.dart +++ b/lib/core/styles/app_images.dart @@ -6,7 +6,7 @@ class AppImages { "assets/images/welcome_screen/svg/Tanami_Capital_Splash_Logo.svg"; //Welcome - static const String weclomeLogo = + static const String welcomeLogo = "assets/images/welcome_screen/svg/Tanami_Capital_Logo.svg"; static const String firstWelcome = "assets/images/welcome_screen/png/First_Onboarding.png"; diff --git a/lib/core/styles/app_text.dart b/lib/core/styles/app_text.dart index 384bda0..400f128 100644 --- a/lib/core/styles/app_text.dart +++ b/lib/core/styles/app_text.dart @@ -132,6 +132,32 @@ class AppText { static const String walletText = "Wallet"; static const String day = "Today"; static const String onHold = "On hold"; + static const String walletDetailsTitle = "Details"; + static const String withdrawalScreenTitle = 'Enter bank details'; + static const String status = "Status"; + static const String paymentMethod = "Payment Method"; + static const String accountName = "Account Name"; + static const String accountHolderName = + 'Account Holder Name/Beneficiary Name'; + static const String iban = "IBAN"; + static const String beneficiaryAddress = "Beneficiary Address"; + static const String bankName = "Bank Name"; + static const String branchAddress = "Branch Address"; + static const String SWIFTcode = "SWIFT/BIC code"; + static const String refid = "Reference ID"; + static const String previewTitle = "Withdrawal confirmation"; + static const String info1 = + 'Please confirm the withdrawal amount and verify the accuracy of your bank details.'; + static const String balance = 'Wallet balance: '; + static const String withdrawTitle = 'Withdrawal'; + static const String withdrawDetails = 'Withdrawal details'; + static const String required = 'Fields with * are required'; + static const String withdrawAmt = 'Total Withdrawal amount:'; + static const String info2 = 'Payment can include transfer fee from your bank'; + static const String next = 'Next'; + static const String submit = 'Submit request'; + static const String cont = 'Continue'; + static const String later = 'Later'; //Settings static const String settingsText = "Settings"; diff --git a/lib/features/MainScreens/Wallet/presentation/pages/kyc.dart b/lib/features/MainScreens/Wallet/presentation/pages/kyc.dart new file mode 100644 index 0000000..e41fd43 --- /dev/null +++ b/lib/features/MainScreens/Wallet/presentation/pages/kyc.dart @@ -0,0 +1,172 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:tanami_app/core/styles/app_images.dart'; +import 'package:tanami_app/core/styles/app_text.dart'; +import 'package:tanami_app/shared/components/text_widget.dart'; + +class KYCScreen extends StatefulWidget { + const KYCScreen({super.key}); + + @override + State createState() => _KYCScreenState(); +} + +class _KYCScreenState extends State { + List data = [ + 'Verify your identity', + 'Take a selfie', + 'Upload a proof of address', + 'Confirm your risk profile and sign agreement', + ]; + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + automaticallyImplyLeading: false, + actions: [ + IconButton( + onPressed: () {}, + icon: const Icon( + Icons.close_sharp, + size: 30.0, + ), + ), + ], + ), + body: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SvgPicture.asset( + AppImages.welcomeLogo, + ), + SizedBox( + height: 24.h, + ), + Text( + 'Almost here...', + style: GoogleFonts.dmSans( + color: const Color(0xFF363636), + fontSize: 17.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + height: 8.h, + ), + SizedBox( + width: 280.w, + child: Text( + 'Complete account profile in 3 minutes to start investing', + textAlign: TextAlign.center, + style: GoogleFonts.dmSans( + color: const Color(0xFF8D8D8D), + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + SizedBox( + height: 40.h, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 50.0), + child: ListView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: data.length, + itemBuilder: (context, index) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 10.0), + child: Row( + children: [ + Image.asset( + 'assets/images/wallet_screen/${index + 1}.png', + height: 45.h, + ), + SizedBox( + width: 12.w, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Step ${index + 1}', + textAlign: TextAlign.center, + style: GoogleFonts.dmSans( + color: const Color(0xFF363636), + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + width: 10.h, + ), + SizedBox( + width: 230.w, + child: Text( + data[index], + style: GoogleFonts.dmSans( + color: const Color(0xFF363636), + fontSize: 14.sp, + fontWeight: FontWeight.w400, + ), + ), + ), + ], + ) + ], + ), + ); + }, + ), + ), + SizedBox( + height: 70.h, + ), + GestureDetector( + onTap: () { + // goRouter.pushNamed(RouteName.otpScreen, pathParameters: { + // "fromScreen": 'withdrawal', + // }); + }, + child: Container( + margin: const EdgeInsets.all(12.0), + height: 56.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFF004717), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Text( + AppText.cont, + style: GoogleFonts.dmSans( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + ), + ), + ), + SizedBox( + height: 10.h, + ), + TextWidget().text14W700( + AppText.later, + clr: const Color(0xFF363636), + textDecoration: TextDecoration.underline, + ) + ], + ), + ), + ); + } +} diff --git a/lib/features/MainScreens/Wallet/presentation/pages/walletDetails.dart b/lib/features/MainScreens/Wallet/presentation/pages/walletDetails.dart index dd72cd0..e5ed198 100644 --- a/lib/features/MainScreens/Wallet/presentation/pages/walletDetails.dart +++ b/lib/features/MainScreens/Wallet/presentation/pages/walletDetails.dart @@ -1,34 +1,58 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:tanami_app/core/styles/app_text.dart'; class WalletDetails extends StatelessWidget { final String type; WalletDetails({super.key, required this.type}); - final Map data_deposit = { - 'Payment method': 'Google/Apple Pay', - 'Account Name': 'Name Surname', - 'IBAN': 'DE 1234 5678 9012 3456', - 'Beneficiary Address': 'Hohenzollernring 58, 95444', - 'Bank Name': 'Bank Name', - 'Branch Address': 'Hohenzollernring 58, 95444', - 'SWIFT/BIC code': 'BC12345', - 'Reference ID': 'FRYU FHDU 1234', - }; - final Map data_withdraw = { - 'Status': 'On hold', - 'Payment method': 'Google/Apple Pay', - 'Account Name': 'Name Surname', - 'IBAN': 'DE 1234 5678 9012 3456', - 'Beneficiary Address': 'Hohenzollernring 58, 95444', - 'Bank Name': 'Bank Name', - 'Branch Address': 'Hohenzollernring 58, 95444', - 'SWIFT/BIC code': 'BC12345', - 'Reference ID': 'FRYU FHDU 1234', - }; - final Map data_invest = { - 'Payment method': 'Google/Apple Pay', - }; + final List titles = [ + AppText.status, + AppText.paymentMethod, + AppText.accountName, + AppText.iban, + AppText.beneficiaryAddress, + AppText.bankName, + AppText.branchAddress, + AppText.SWIFTcode, + AppText.refid, + ]; + final List values = [ + 'On hold', + 'Google/Apple Pay', + 'Name Surname', + 'DE 1234 5678 9012 3456', + 'Hohenzollernring 58, 95444', + 'Name Bank', + 'Hohenzollernring 58, 95444', + 'BC12345', + 'FRYU FHDU 1234', + ]; + + // final Map data_deposit = { + // AppText.paymentMethod: 'Google/Apple Pay', + // AppText.accountName: 'Name Surname', + // AppText.iban: 'DE 1234 5678 9012 3456', + // AppText.beneficiaryAddress: 'Hohenzollernring 58, 95444', + // AppText.bankName: 'Bank Name', + // AppText.branchAddress: 'Hohenzollernring 58, 95444', + // AppText.SWIFTcode: 'BC12345', + // AppText.refid: 'FRYU FHDU 1234', + // }; + // final Map data_withdraw = { + // AppText.status: 'On hold', + // AppText.paymentMethod: 'Google/Apple Pay', + // AppText.accountName: 'Name Surname', + // AppText.iban: 'DE 1234 5678 9012 3456', + // AppText.beneficiaryAddress: 'Hohenzollernring 58, 95444', + // AppText.bankName: 'Bank Name', + // AppText.branchAddress: 'Hohenzollernring 58, 95444', + // AppText.SWIFTcode: 'BC12345', + // AppText.refid: 'FRYU FHDU 1234', + // }; + // final Map data_invest = { + // AppText.paymentMethod: 'Google/Apple Pay', + // }; @override Widget build(BuildContext context) { return Scaffold( @@ -39,7 +63,7 @@ class WalletDetails extends StatelessWidget { scrolledUnderElevation: 0.0, centerTitle: true, title: Text( - 'Details', + AppText.walletDetailsTitle, style: GoogleFonts.dmSans( color: const Color(0xFF272727), fontSize: 20.sp, @@ -47,74 +71,100 @@ class WalletDetails extends StatelessWidget { ), ), ), - body: Padding( - padding: const EdgeInsets.all(18.0), - child: Container( - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(22.r), - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.15), - spreadRadius: 2, - blurRadius: 10, - offset: const Offset(0, 8), // changes position of shadow + body: Stack( + children: [ + Padding( + padding: const EdgeInsets.all(18.0), + child: Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + spreadRadius: 2, + blurRadius: 10, + offset: const Offset(0, 8), // changes position of shadow + ), + ], ), - ], - ), - child: Padding( - padding: const EdgeInsets.fromLTRB(20.0, 30, 20, 10), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.center, + child: Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30, 20, 10), + child: Column( + mainAxisSize: MainAxisSize.min, children: [ - getIcon(type), - SizedBox( - height: 16.h, - ), - Text( - type, - style: GoogleFonts.dmSans( - color: const Color(0xFF191B1E), - fontSize: 14.sp, - fontWeight: FontWeight.w600, - ), + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + getIcon(type), + SizedBox( + height: 16.h, + ), + Text( + type, + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w600, + ), + ), + SizedBox( + height: 4.h, + ), + Text( + '10/04/2024 22:04', + style: GoogleFonts.dmSans( + color: const Color(0xFF8D8D8D), + fontSize: 11.sp, + fontWeight: FontWeight.w500, + ), + ), + SizedBox( + height: 16.h, + ), + Text( + '+ SAR 100,000', + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 20.sp, + fontWeight: FontWeight.w900, + ), + ), + ], ), SizedBox( - height: 4.h, - ), - Text( - '10/04/2024 22:04', - style: GoogleFonts.dmSans( - color: const Color(0xFF8D8D8D), - fontSize: 11.sp, - fontWeight: FontWeight.w500, - ), - ), - SizedBox( - height: 16.h, - ), - Text( - '+ SAR 100,000', - style: GoogleFonts.dmSans( - color: const Color(0xFF191B1E), - fontSize: 20.sp, - fontWeight: FontWeight.w900, - ), + height: 35.h, ), + _buildBody(), ], ), - SizedBox( - height: 35.h, - ), - _buildBody(), - ], + ), ), ), - ), + // Positioned( + // // bottom: 40, + // top: 400.h, + // // right: 30, + // child: Container( + // height: 20.r, + // decoration: const BoxDecoration( + // shape: BoxShape.circle, + // color: Colors.red, + // ), + // ), + // ), + // Align( + // alignment: Alignment.centerLeft, + // child: Container( + // height: 20.r, + // decoration: const BoxDecoration( + // shape: BoxShape.circle, + // color: Colors.red, + // ), + // ), + // ) + ], ), ); } @@ -176,99 +226,110 @@ class WalletDetails extends StatelessWidget { } Widget _buildBody() { - List> entries; - if (type == 'Deposit') { - entries = data_deposit.entries.toList(); - } else if (type == 'Withdrawal') { - entries = data_withdraw.entries.toList(); - } else if (type == 'Yield') { + // List> entries; + if (type == 'Yield') { return Container(); } else if (type == 'Refund') { return Container(); - } else { - entries = data_invest.entries.toList(); - return Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - entries[0].key, - style: GoogleFonts.dmSans( - color: const Color(0xFF535353), - fontSize: 14.sp, - fontWeight: FontWeight.w500, - ), + } else if (type == 'Investment') { + return Container( + width: double.infinity, + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: Colors.white, + width: 1.0, ), - SizedBox( - width: 180.w, - child: Text( - entries[0].value, - textAlign: TextAlign.end, + ), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + AppText.paymentMethod, style: GoogleFonts.dmSans( - color: const Color(0xFF191B1E), + color: const Color(0xFF535353), fontSize: 14.sp, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w500, ), ), - ), - ], + SizedBox( + width: 180.w, + child: Text( + 'Google/Apple Pay', + textAlign: TextAlign.end, + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + ), + ); + } else { + return Expanded( + child: ListView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: titles.length, + itemBuilder: (context, index) { + if (type == 'Deposit' && titles[index] == 'Status') { + return Container(); + } else { + return Container( + width: double.infinity, + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: (index != titles.length - 1) + ? Colors.black + : Colors.white, + width: 1.0, + ), + ), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + titles[index], + style: GoogleFonts.dmSans( + color: const Color(0xFF535353), + fontSize: 14.sp, + fontWeight: FontWeight.w500, + ), + ), + SizedBox( + width: 180.w, + child: Text( + values[index], + textAlign: TextAlign.end, + style: GoogleFonts.dmSans( + color: (titles[index] == 'Status') + ? const Color(0xFF0172CB) + : const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: (titles[index] == 'Status') + ? FontWeight.w700 + : FontWeight.w600, + ), + ), + ), + ], + ), + ), + ); + } + }, ), ); } - return Expanded( - child: ListView.builder( - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemCount: entries.length, - itemBuilder: (context, index) { - return Container( - width: double.infinity, - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: (index != entries.length - 1) - ? Colors.black - : Colors.white, - width: 1.0, - ), - ), - ), - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - entries[index].key, - style: GoogleFonts.dmSans( - color: const Color(0xFF535353), - fontSize: 14.sp, - fontWeight: FontWeight.w500, - ), - ), - SizedBox( - width: 180.w, - child: Text( - entries[index].value, - textAlign: TextAlign.end, - style: GoogleFonts.dmSans( - color: (entries[index].key == 'Status') - ? const Color(0xFF0172CB) - : const Color(0xFF191B1E), - fontSize: 14.sp, - fontWeight: (entries[index].key == 'Status') - ? FontWeight.w700 - : FontWeight.w600, - ), - ), - ), - ], - ), - ), - ); - }, - ), - ); } } diff --git a/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart b/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart index bd92cac..cb43704 100644 --- a/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart +++ b/lib/features/MainScreens/Wallet/presentation/pages/walletScreen.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:tanami_app/core/routes/route_name.dart'; @@ -57,6 +56,13 @@ class _WalletScreenState extends State { }, ]; + @override + void initState() { + // TODO: implement initState + // _savebottomsheet(); + super.initState(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -107,7 +113,6 @@ class _WalletScreenState extends State { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Container( - // height: 86.h, decoration: BoxDecoration( color: Colors.white.withOpacity(0.8), borderRadius: @@ -151,31 +156,36 @@ class _WalletScreenState extends State { color: Colors.black, width: 20.0, ), - Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - decoration: const BoxDecoration( - shape: BoxShape.circle, - color: Colors.black, - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Image.asset( - 'assets/images/wallet_screen/withdraw.png', - height: 20.h, + GestureDetector( + onTap: () { + goRouter.pushNamed(RouteName.withdrawalScreen); + }, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Colors.black, + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + 'assets/images/wallet_screen/withdraw.png', + height: 20.h, + ), ), ), - ), - Text( - 'Withdraw', - style: GoogleFonts.dmSans( - color: const Color(0xFF363636), - fontSize: 12.sp, - fontWeight: FontWeight.w700, + Text( + 'Withdraw', + style: GoogleFonts.dmSans( + color: const Color(0xFF363636), + fontSize: 12.sp, + fontWeight: FontWeight.w700, + ), ), - ), - ], + ], + ), ), ], ), diff --git a/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/confirmation.dart b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/confirmation.dart new file mode 100644 index 0000000..d7d3775 --- /dev/null +++ b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/confirmation.dart @@ -0,0 +1,279 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:tanami_app/core/routes/route_name.dart'; +import 'package:tanami_app/core/routes/routes.dart'; +import 'package:tanami_app/core/styles/app_text.dart'; + +class WithdrawalConfirmation extends StatefulWidget { + const WithdrawalConfirmation({super.key}); + + @override + State createState() => _WithdrawalConfirmationState(); +} + +class _WithdrawalConfirmationState extends State { + final List titles = [ + AppText.paymentMethod, + AppText.accountName, + AppText.iban, + AppText.beneficiaryAddress, + AppText.bankName, + AppText.branchAddress, + AppText.SWIFTcode, + AppText.refid, + ]; + final List values = [ + 'Google/Apple Pay', + 'Name Surname', + 'DE 1234 5678 9012 3456', + 'Hohenzollernring 58, 95444', + 'Name Bank', + 'Hohenzollernring 58, 95444', + 'BC12345', + 'FRYU FHDU 1234', + ]; + + @override + Widget build(BuildContext context) { + return WillPopScope( + onWillPop: () async => false, + child: Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + automaticallyImplyLeading: false, + backgroundColor: Colors.white, + elevation: 0, + scrolledUnderElevation: 0.0, + centerTitle: true, + title: Text( + 'Withdrawal confirmation', + style: GoogleFonts.dmSans( + color: const Color(0xFF272727), + fontSize: 20.sp, + fontWeight: FontWeight.w700, + ), + ), + actions: [ + IconButton( + onPressed: () { + goRouter.goNamed(RouteName.mainScreen); + }, + icon: const Icon( + Icons.close_sharp, + ), + ), + ], + ), + body: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(18.0, 10, 18.0, 0), + child: Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/wallet_screen/done.png', + height: 25.h, + ), + SizedBox( + width: 10.w, + ), + SizedBox( + width: 320.w, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Please confirm the withdrawal amount and verify the accuracy of your bank details.', + style: GoogleFonts.dmSans( + color: const Color(0xFF015698), + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + height: 4.h, + ), + Text( + 'Processing times vary from 3-7 working days', + style: GoogleFonts.dmSans( + color: const Color(0xFF015698), + fontSize: 12.sp, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + ], + ), + ), + SizedBox( + height: 20.h, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 18.0), + child: Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + spreadRadius: 2, + blurRadius: 10, + offset: const Offset(0, 8), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30, 20, 10), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFFE6681F), + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset( + 'assets/images/wallet_screen/withdraw_list.png', + height: 25.h, + ), + ), + ), + SizedBox( + height: 16.h, + ), + Text( + 'Withdrawal', + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w600, + ), + ), + SizedBox( + height: 4.h, + ), + Text( + '10/04/2024 22:04', + style: GoogleFonts.dmSans( + color: const Color(0xFF8D8D8D), + fontSize: 11.sp, + fontWeight: FontWeight.w500, + ), + ), + SizedBox( + height: 16.h, + ), + Text( + '- SAR 1000', + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 20.sp, + fontWeight: FontWeight.w900, + ), + ), + ], + ), + SizedBox( + height: 35.h, + ), + ListView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: titles.length, + itemBuilder: (context, index) { + return Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12.0), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + titles[index], + style: GoogleFonts.dmSans( + color: const Color(0xFF535353), + fontSize: 14.sp, + fontWeight: FontWeight.w500, + ), + ), + SizedBox( + width: 175.w, + child: Text( + values[index], + textAlign: TextAlign.end, + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + ), + (index != titles.length - 1) + ? Divider() + : Container() + ], + ); + }, + ), + ], + ), + ), + ), + ), + SizedBox( + height: 10.h, + ), + ], + ), + ), + bottomNavigationBar: GestureDetector( + onTap: () { + goRouter.goNamed(RouteName.mainScreen); + }, + child: Container( + margin: const EdgeInsets.all(12.0), + height: 56.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFF004717), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Text( + 'Close', + style: GoogleFonts.dmSans( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/preview.dart b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/preview.dart new file mode 100644 index 0000000..f98ae12 --- /dev/null +++ b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/preview.dart @@ -0,0 +1,344 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:tanami_app/core/routes/route_name.dart'; +import 'package:tanami_app/core/routes/routes.dart'; +import 'package:tanami_app/core/styles/app_text.dart'; + +class WithdrawalPreview extends StatefulWidget { + const WithdrawalPreview({super.key}); + + @override + State createState() => _WithdrawalPreviewState(); +} + +class _WithdrawalPreviewState extends State { + @override + Widget build(BuildContext context) { + List titles = [ + AppText.accountHolderName, + AppText.iban, + AppText.beneficiaryAddress, + AppText.bankName, + AppText.branchAddress, + AppText.SWIFTcode, + ]; + List values = [ + 'Name Surname', + 'DE 1234 5678 9012 3456', + 'Hohenzollernring 58, 95444', + 'Name Bank', + 'Hohenzollernring 58, 95444', + 'BC12345', + ]; + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0, + scrolledUnderElevation: 0.0, + centerTitle: true, + title: Text( + AppText.previewTitle, + style: GoogleFonts.dmSans( + color: const Color(0xFF272727), + fontSize: 20.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(18.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/wallet_screen/info.png', + height: 25.h, + ), + SizedBox( + width: 10.w, + ), + SizedBox( + width: 320.w, + child: Text( + AppText.info1, + style: GoogleFonts.dmSans( + color: const Color(0xFF015698), + fontSize: 12.sp, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + SizedBox( + height: 20.h, + ), + RichText( + text: TextSpan( + children: [ + TextSpan( + text: AppText.balance, + style: GoogleFonts.dmSans( + color: const Color(0xFF888888), + fontSize: 12.sp, + fontWeight: FontWeight.w700, + ), + ), + TextSpan( + text: 'SAR 178,000 ', + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + ), + SizedBox( + height: 20.h, + ), + Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + spreadRadius: 2, + blurRadius: 10, + offset: const Offset(0, 5), + ), + ], + ), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(12.0), + child: Row( + children: [ + Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFFE6681F)), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Image.asset( + 'assets/images/wallet_screen/withdraw_list.png', + height: 36.h, + ), + ), + ), + SizedBox( + width: 12.w, + ), + Text( + AppText.withdrawTitle, + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 17.sp, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(22.r), + bottomRight: Radius.circular(22.r), + ), + color: const Color(0xFFD8D8D8).withOpacity(0.4), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 16.0, horizontal: 12.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + AppText.withdrawAmt, + style: GoogleFonts.dmSans( + color: const Color(0xFF535353), + fontSize: 14.sp, + fontWeight: FontWeight.w500, + ), + ), + Text( + 'SAR 1000', + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + ), + ), + ], + ), + ), + SizedBox( + height: 20.h, + ), + Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFFEEF6FB), + border: Border.all(color: const Color(0xFF90D4FF)), + boxShadow: const [ + BoxShadow( + color: Color(0xFFB0D3EF), + spreadRadius: 1, + blurRadius: 10, + offset: Offset(0, 3), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 12.0, horizontal: 16.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/wallet_screen/info.png', + height: 25.h, + ), + SizedBox( + width: 10.w, + ), + Text( + AppText.info2, + style: GoogleFonts.dmSans( + color: const Color(0xFF015698), + fontSize: 12.sp, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + ), + SizedBox( + height: 20.h, + ), + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppText.withdrawDetails, + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 15.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + height: 10.h, + ), + const Divider( + color: Color(0xFFE3E3E3), + ), + SizedBox( + height: 10.h, + ), + ListView.builder( + physics: const NeverScrollableScrollPhysics(), + itemCount: titles.length, + shrinkWrap: true, + itemBuilder: (context, index) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + titles[index], + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + height: 8.h, + ), + Text( + values[index], + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w400, + ), + ), + (index != titles.length - 1) + ? Column( + children: [ + SizedBox( + height: 10.h, + ), + const Divider( + color: Color(0xFFE3E3E3), + ), + SizedBox( + height: 10.h, + ), + ], + ) + : SizedBox( + height: 10.h, + ), + ], + ); + }, + ) + ], + ), + ], + ), + ), + ), + bottomNavigationBar: GestureDetector( + onTap: () { + goRouter.pushNamed(RouteName.otpScreen, pathParameters: { + "fromScreen": 'withdrawal', + }); + }, + child: Container( + margin: const EdgeInsets.all(12.0), + height: 56.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFF004717), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Text( + AppText.submit, + style: GoogleFonts.dmSans( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart new file mode 100644 index 0000000..e46eac2 --- /dev/null +++ b/lib/features/MainScreens/Wallet/presentation/pages/withdrawal/withdrawalScreen.dart @@ -0,0 +1,436 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:tanami_app/core/routes/route_name.dart'; +import 'package:tanami_app/core/routes/routes.dart'; +import 'package:tanami_app/core/styles/app_text.dart'; + +class WithdrawalScreen extends StatefulWidget { + const WithdrawalScreen({super.key}); + + @override + State createState() => _WithdrawalScreenState(); +} + +class _WithdrawalScreenState extends State { + @override + Widget build(BuildContext context) { + List titles = [ + '${AppText.accountHolderName} *', + '${AppText.iban} *', + AppText.beneficiaryAddress, + AppText.bankName, + AppText.branchAddress, + AppText.SWIFTcode, + ]; + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0, + scrolledUnderElevation: 0.0, + centerTitle: true, + title: Text( + AppText.withdrawalScreenTitle, + style: GoogleFonts.dmSans( + color: const Color(0xFF272727), + fontSize: 20.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + body: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(18.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + RichText( + text: TextSpan( + children: [ + TextSpan( + text: AppText.balance, + style: GoogleFonts.dmSans( + color: const Color(0xFF888888), + fontSize: 12.sp, + fontWeight: FontWeight.w700, + ), + ), + TextSpan( + text: 'SAR 178,000 ', + style: GoogleFonts.dmSans( + color: const Color(0xFF191B1E), + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + ), + SizedBox( + height: 20.h, + ), + Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + spreadRadius: 2, + blurRadius: 10, + offset: const Offset(0, 5), + ), + ], + ), + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(12.0), + child: Row( + children: [ + Container( + decoration: const BoxDecoration( + shape: BoxShape.circle, + color: Color(0xFFE6681F)), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Image.asset( + 'assets/images/wallet_screen/withdraw_list.png', + height: 36.h, + ), + ), + ), + SizedBox( + width: 12.w, + ), + Text( + AppText.withdrawTitle, + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 17.sp, + fontWeight: FontWeight.w700, + ), + ), + ], + ), + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(22.r), + bottomRight: Radius.circular(22.r), + ), + color: Color(0xFFD8D8D8).withOpacity(0.4), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 16.0, horizontal: 12.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'SAR', + style: GoogleFonts.dmSans( + color: const Color(0xFF363636), + fontSize: 15.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + width: 12.w, + ), + SizedBox( + width: 280.w, + child: TextFormField( + cursorColor: Colors.black, + keyboardType: TextInputType.number, + textAlign: TextAlign.center, + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 16.sp, + fontWeight: FontWeight.w400, + ), + decoration: InputDecoration( + hintText: '1000', + hintStyle: GoogleFonts.dmSans( + color: const Color(0xFFC6C6C6), + fontSize: 16.sp, + fontWeight: FontWeight.w400, + ), + labelStyle: + const TextStyle(color: Colors.black), + contentPadding: const EdgeInsets.symmetric( + vertical: 15, horizontal: 10), + filled: true, + fillColor: Colors.white, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.red, width: 1), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.red, width: 1), + ), + ), + inputFormatters: [ + FilteringTextInputFormatter.deny( + RegExp(r'\s')), + LengthLimitingTextInputFormatter(20), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ), + SizedBox( + height: 20.h, + ), + Container( + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFFEEF6FB), + border: Border.all(color: const Color(0xFF90D4FF)), + boxShadow: const [ + BoxShadow( + color: Color(0xFFB0D3EF), + spreadRadius: 1, + blurRadius: 10, + offset: Offset(0, 3), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 12.0, horizontal: 16.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/wallet_screen/info.png', + height: 25.h, + ), + SizedBox( + width: 10.w, + ), + Text( + AppText.info2, + style: GoogleFonts.dmSans( + color: const Color(0xFF015698), + fontSize: 12.sp, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ), + ), + SizedBox( + height: 20.h, + ), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFFF4F4F4), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + spreadRadius: 2, + blurRadius: 10, + offset: const Offset(0, 5), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(20, 22, 20, 0), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppText.withdrawDetails, + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 15.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + height: 3.h, + ), + Text( + AppText.required, + style: GoogleFonts.dmSans( + color: const Color(0xFF8D8D8D), + fontSize: 14.sp, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + SizedBox( + height: 10.h, + ), + const Divider( + color: Colors.grey, + ), + SizedBox( + height: 10.h, + ), + ListView.builder( + physics: const NeverScrollableScrollPhysics(), + itemCount: titles.length, + shrinkWrap: true, + itemBuilder: (context, index) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + titles[index], + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + SizedBox( + height: 8.h, + ), + SizedBox( + width: double.infinity, + child: TextFormField( + cursorColor: Colors.black, + style: GoogleFonts.dmSans( + color: Colors.black, + fontSize: 16.sp, + fontWeight: FontWeight.w400, + ), + decoration: InputDecoration( + hintText: 'Value', + hintStyle: GoogleFonts.dmSans( + color: const Color(0xFFC6C6C6), + fontSize: 16.sp, + fontWeight: FontWeight.w400, + ), + labelStyle: + const TextStyle(color: Colors.black), + contentPadding: const EdgeInsets.symmetric( + vertical: 15, horizontal: 10), + filled: true, + fillColor: Colors.white, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + disabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.white, width: 1), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.red, width: 1), + ), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: const BorderSide( + color: Colors.red, width: 1), + ), + ), + inputFormatters: [ + FilteringTextInputFormatter.deny( + RegExp(r'\s')), + LengthLimitingTextInputFormatter(20), + ], + ), + ), + SizedBox( + height: 22.h, + ), + ], + ); + }, + ) + ], + ), + ), + ), + ], + ), + ), + ), + bottomNavigationBar: GestureDetector( + onTap: () { + goRouter.pushNamed(RouteName.withdrawalPreview); + }, + child: Container( + margin: const EdgeInsets.all(12.0), + height: 56.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22.r), + color: const Color(0xFF004717), + ), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Text( + AppText.next, + style: GoogleFonts.dmSans( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w700, + ), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/features/MainScreens/main_screen.dart b/lib/features/MainScreens/main_screen.dart index ddfafcf..584e344 100644 --- a/lib/features/MainScreens/main_screen.dart +++ b/lib/features/MainScreens/main_screen.dart @@ -4,6 +4,7 @@ import 'package:tanami_app/features/MainScreens/Academy/presentation/pages/acade import 'package:tanami_app/features/MainScreens/Invest/presentation/pages/invest_screen.dart'; import 'package:tanami_app/features/MainScreens/Portfolio/presentation/pages/portfolio_screen.dart'; import 'package:tanami_app/features/MainScreens/Settings/presentation/pages/settings_Screen.dart'; +import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/kyc.dart'; import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/walletScreen.dart'; import 'package:tanami_app/shared/components/common_bottom_navigation.dart'; @@ -12,7 +13,8 @@ import '../../shared/components/bloc/bottom_nav_bar/bottom_navigation_state.dart import '../../shared/components/exit_app_dialog.dart'; var currentTab = [ - const WalletScreen(), + // const WalletScreen(), + const KYCScreen(), const PortfolioScreen(), const InvestScreen(), const AcademyScreen(), diff --git a/lib/features/changePassword/presentation/pages/change_password_layout.dart b/lib/features/changePassword/presentation/pages/change_password_layout.dart index 353a282..7b08d31 100644 --- a/lib/features/changePassword/presentation/pages/change_password_layout.dart +++ b/lib/features/changePassword/presentation/pages/change_password_layout.dart @@ -8,8 +8,10 @@ class ChangePasswordLayout extends StatelessWidget { @override Widget build(BuildContext context) { + return const Scaffold( bottomNavigationBar: RestorePasswordBottomSection(), body: RestorePasswordForm()); + } } diff --git a/lib/features/contactAdmin/presentation/widgets/top_section.dart b/lib/features/contactAdmin/presentation/widgets/top_section.dart index 6b051dc..12e9fbf 100644 --- a/lib/features/contactAdmin/presentation/widgets/top_section.dart +++ b/lib/features/contactAdmin/presentation/widgets/top_section.dart @@ -13,7 +13,7 @@ Widget topSection() { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(24), diff --git a/lib/features/deleteAccount/presentation/widgets/top_section.dart b/lib/features/deleteAccount/presentation/widgets/top_section.dart index e89df2d..8fb729b 100644 --- a/lib/features/deleteAccount/presentation/widgets/top_section.dart +++ b/lib/features/deleteAccount/presentation/widgets/top_section.dart @@ -19,7 +19,7 @@ class TopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(30), diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart index 28c2dfb..c49e16e 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart @@ -19,7 +19,7 @@ class RestorePasswordPhoneVerificationTopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(60), diff --git a/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart b/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart index 4340449..5c15399 100644 --- a/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart +++ b/lib/features/forgotPassword/presentation/widgets/restore_password_top_section.dart @@ -19,7 +19,7 @@ class RestorePasswordTopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(60), diff --git a/lib/features/login/presentation/widgets/top_section.dart b/lib/features/login/presentation/widgets/top_section.dart index 8ca31e8..02e1cde 100644 --- a/lib/features/login/presentation/widgets/top_section.dart +++ b/lib/features/login/presentation/widgets/top_section.dart @@ -21,7 +21,7 @@ class TopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(60), diff --git a/lib/features/otpVerification/presentation/pages/otp_layout.dart b/lib/features/otpVerification/presentation/pages/otp_layout.dart index 7bd3166..b51cc16 100644 --- a/lib/features/otpVerification/presentation/pages/otp_layout.dart +++ b/lib/features/otpVerification/presentation/pages/otp_layout.dart @@ -14,14 +14,15 @@ class OtpLayout extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - body: ListView( - children: [ - const OtpTopSection(), - OtpFillSection( - fromScreen: fromScreen, - ), - const ResendOtpSection(), - ], - )); + body: ListView( + children: [ + const OtpTopSection(), + OtpFillSection( + fromScreen: fromScreen, + ), + const ResendOtpSection(), + ], + ), + ); } } diff --git a/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart b/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart index 07cdf96..334dfd0 100644 --- a/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart +++ b/lib/features/otpVerification/presentation/widgets/otp_fill_section.dart @@ -33,9 +33,13 @@ class OtpFillSection extends StatelessWidget { AppText.otpVerifiedSucessfully, ); - fromScreen == "forgot-password" - ? goRouter.pushNamed(RouteName.forgotPasswordScreen) - : goRouter.pushNamed(RouteName.registerUserDetailsScreen); + if (fromScreen == "forgot-password") { + goRouter.pushNamed(RouteName.forgotPasswordScreen); + } else if (fromScreen == "withdrawal") { + goRouter.pushNamed(RouteName.withdrawalConfirmation); + } else { + goRouter.pushNamed(RouteName.registerUserDetailsScreen); + } } else if (state is OtpSubmissionFailure) { goRouter.pop(); errorToastMessage( diff --git a/lib/features/otpVerification/presentation/widgets/otp_top_section.dart b/lib/features/otpVerification/presentation/widgets/otp_top_section.dart index c1d85f9..b3f6ad7 100644 --- a/lib/features/otpVerification/presentation/widgets/otp_top_section.dart +++ b/lib/features/otpVerification/presentation/widgets/otp_top_section.dart @@ -18,7 +18,7 @@ class OtpTopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(125), diff --git a/lib/features/register/presentation/widgets/register_step_top_section.dart b/lib/features/register/presentation/widgets/register_step_top_section.dart index fee10b5..86645dd 100644 --- a/lib/features/register/presentation/widgets/register_step_top_section.dart +++ b/lib/features/register/presentation/widgets/register_step_top_section.dart @@ -17,7 +17,7 @@ class RegisterStepTopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(30), diff --git a/lib/features/register/presentation/widgets/register_top_section.dart b/lib/features/register/presentation/widgets/register_top_section.dart index 3917f5f..c82dfd5 100644 --- a/lib/features/register/presentation/widgets/register_top_section.dart +++ b/lib/features/register/presentation/widgets/register_top_section.dart @@ -17,7 +17,7 @@ class RegisterTopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(60), diff --git a/lib/features/register/presentation/widgets/register_user_top_section.dart b/lib/features/register/presentation/widgets/register_user_top_section.dart index 71b8f33..b90091c 100644 --- a/lib/features/register/presentation/widgets/register_user_top_section.dart +++ b/lib/features/register/presentation/widgets/register_user_top_section.dart @@ -17,7 +17,7 @@ class RegisterUserTopSection extends StatelessWidget { const Gap(22), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(25), diff --git a/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart b/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart index 28d92ea..69828e2 100644 --- a/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart +++ b/lib/features/securePin/presentation/widgets/confirm_pin_top_section.dart @@ -17,7 +17,7 @@ class ConfirmPinTopSection extends StatelessWidget { const Gap(85), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(60), diff --git a/lib/features/securePin/presentation/widgets/pin_top_section.dart b/lib/features/securePin/presentation/widgets/pin_top_section.dart index 187c7e2..a1daf83 100644 --- a/lib/features/securePin/presentation/widgets/pin_top_section.dart +++ b/lib/features/securePin/presentation/widgets/pin_top_section.dart @@ -21,7 +21,7 @@ class PinTopSection extends StatelessWidget { const Gap(70), Center( child: SvgPicture.asset( - AppImages.weclomeLogo, + AppImages.welcomeLogo, ), ), const Gap(40), diff --git a/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart b/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart index 6f96393..7fd139b 100644 --- a/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart +++ b/lib/features/welcome/presentation/widgets/build_onboarding_page_widget.dart @@ -24,7 +24,7 @@ Widget buildOnboardingPage( return Column( children: [ const Gap(80), - SvgPicture.asset(AppImages.weclomeLogo), + SvgPicture.asset(AppImages.welcomeLogo), Image.asset( imageAsset, width: 1.sw,