From f057a346c228082b8a75944f3cfd86770269d141 Mon Sep 17 00:00:00 2001 From: Dian Bayu Nugroho Date: Mon, 26 Feb 2024 15:05:47 +0700 Subject: [PATCH] fix: add validation form data bank --- .../data_bank/confirm_bank_account.dart | 187 ++++++++++-------- .../data_bank/submit_bank_account.dart | 139 ++++++++----- .../view/submission_data/submit_email.dart | 1 - .../viewmodel/submission_data_viewmodel.dart | 21 ++ 4 files changed, 209 insertions(+), 139 deletions(-) diff --git a/lib/features/auth/registration/view/submission_data/data_bank/confirm_bank_account.dart b/lib/features/auth/registration/view/submission_data/data_bank/confirm_bank_account.dart index 590e9a8..591052e 100644 --- a/lib/features/auth/registration/view/submission_data/data_bank/confirm_bank_account.dart +++ b/lib/features/auth/registration/view/submission_data/data_bank/confirm_bank_account.dart @@ -6,107 +6,120 @@ import 'package:cims_apps/application/theme/color_palette.dart'; import 'package:cims_apps/core/route/route.dart'; import 'package:cims_apps/core/utils/size_config.dart'; import 'package:cims_apps/features/auth/registration/view/submission_data/submission_parent.dart'; +import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class ModelDataBank { + final String? title, subtitle; + ModelDataBank(this.title, this.subtitle); +} class ConfirmBankAccount extends StatelessWidget { const ConfirmBankAccount({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - List listData = [ - {'title': 'Bank Name', 'subtitle': 'Bank Mandiri'}, - {'title': 'Account Number', 'subtitle': '123002212084'}, - {'title': 'Account Owner Name', 'subtitle': 'Muhamad Rosyidin'}, - {'title': 'Name on ID card', 'subtitle': 'Muhamad Rosyidin'}, - ]; - return Scaffold( - appBar: AppBar( - toolbarHeight: 70, - backgroundColor: Colors.white, - surfaceTintColor: Colors.white, - automaticallyImplyLeading: false, - title: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const BackButtonView(), - const Text('Registration'), - SizedBox( - width: SizeConfig.width * 0.1, - ) - ], - ), - shape: const RoundedRectangleBorder( - side: BorderSide(color: ColorPalette.slate200)), - ), - body: SingleChildScrollView( - padding: const EdgeInsets.all(16.0), - child: SizedBox( - height: SizeConfig.height * .85, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const TextCaption(title: 'Bank account confirmation'), - SizedBox( - height: SizeConfig.height * .6, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ...listData.map((e) { - return Padding( - padding: const EdgeInsets.only(bottom: 16.0), + final listDataBank = + ModalRoute.of(context)!.settings.arguments as List; + + return ChangeNotifierProvider( + create: (context) => SubmissionDataViewModel(), + builder: (context, child) { + return Scaffold( + appBar: AppBar( + toolbarHeight: 70, + backgroundColor: Colors.white, + surfaceTintColor: Colors.white, + automaticallyImplyLeading: false, + title: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const BackButtonView(), + const Text('Registration'), + SizedBox( + width: SizeConfig.width * 0.1, + ) + ], + ), + shape: const RoundedRectangleBorder( + side: BorderSide(color: ColorPalette.slate200)), + ), + body: SingleChildScrollView( + padding: const EdgeInsets.all(16.0), + child: SizedBox( + height: SizeConfig.height * .85, + child: Consumer( + builder: (context, provider, child) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TextCaption(title: 'Bank account confirmation'), + SizedBox( + height: SizeConfig.height * .6, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - e['title'], - style: const TextStyle( - color: ColorPalette.slate400, fontSize: 16), - ), - Text( - e['subtitle'], - style: const TextStyle( - fontSize: 16, - color: ColorPalette.slate800, - fontWeight: FontWeight.w600), + ...listDataBank.map((e) { + return Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + e.title!, + style: const TextStyle( + color: ColorPalette.slate400, + fontSize: 16), + ), + Text( + e.subtitle!, + style: const TextStyle( + fontSize: 16, + color: ColorPalette.slate800, + fontWeight: FontWeight.w600), + ), + ], + ), + ); + }).toList(), + const ListTileView( + title: + 'Make sure your data is correct as it will affect the disbursement process', ), ], ), - ); - }).toList(), - const ListTileView( - title: - 'Make sure your data is correct as it will affect the disbursement process', - ), - ], - ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ButtonView( + name: 'Recheck', + isOutlined: true, + width: SizeConfig.width * .42, + onPressed: () { + Navigator.pop(context); + }, + ), + ButtonView( + name: 'Confirm', + width: SizeConfig.width * .42, + onPressed: () { + routePush(context, + page: const SubmissionParent()); + }, + ), + ], + ) + ], + ); + }), ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - ButtonView( - name: 'Recheck', - isOutlined: true, - width: SizeConfig.width * .42, - onPressed: () { - Navigator.pop(context); - }, - ), - ButtonView( - name: 'Confirm', - width: SizeConfig.width * .42, - onPressed: () { - routePush(context, page: const SubmissionParent()); - }, - ), - ], - ) - ], - ), - ), - ), - ); + ), + ); + }); } } diff --git a/lib/features/auth/registration/view/submission_data/data_bank/submit_bank_account.dart b/lib/features/auth/registration/view/submission_data/data_bank/submit_bank_account.dart index 7c26f43..078e1f5 100644 --- a/lib/features/auth/registration/view/submission_data/data_bank/submit_bank_account.dart +++ b/lib/features/auth/registration/view/submission_data/data_bank/submit_bank_account.dart @@ -63,61 +63,98 @@ class SubmitBankAccount extends StatelessWidget { return SizedBox( child: Consumer( builder: (context, provider, child) { - return SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const TextCaption(title: 'Input your bank account data'), - TextFormView( - name: 'Bank Name', - hintText: 'Select bank', - readOnly: true, - ctrl: provider.ctrlBankName, - onTap: () { - showSearchBank(provider.ctrlBankName); - }, - suffixIcon: const Icon( - Icons.keyboard_arrow_down_outlined, + return SizedBox( + height: SizeConfig.height * .8, + child: Form( + key: provider.formKeySubmitDataBank, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const TextCaption(title: 'Input your bank account data'), + TextFormView( + name: 'Bank Name', + hintText: 'Select bank', + readOnly: true, + ctrl: provider.ctrlBankName, + onTap: () { + showSearchBank(provider.ctrlBankName); + }, + suffixIcon: const Icon( + Icons.keyboard_arrow_down_outlined, + ), + validator: (value) { + if (value!.isEmpty) { + return 'Field must be filled'; + } + return null; + }, ), - ), - TextFormView( - name: 'Account Number', - hintText: 'Input Account Number', - keyboardType: TextInputType.number, - trailingTitleWidget: SizedBox( - width: 24, - child: GestureDetector( - onTap: () { - routePush(context, page: const GuideScreen()); - }, - child: - const ImageView(image: PathAssets.iconQuestion), + TextFormView( + name: 'Account Number', + hintText: 'Input Account Number', + ctrl: provider.ctrlNoAccountBank, + keyboardType: TextInputType.number, + validator: (value) { + if (value!.isEmpty) { + return 'Field must be filled'; + } + return null; + }, + trailingTitleWidget: SizedBox( + width: 24, + child: GestureDetector( + onTap: () { + routePush(context, page: const GuideScreen()); + }, + child: + const ImageView(image: PathAssets.iconQuestion), + ), ), ), - ), - TextFormView( - name: 'Account Owner Name', - hintText: 'Input Account Name', - ), - const Text( - "Make sure the account you use is in your name, not someone else's", - style: TextStyle( - color: ColorPalette.slate400, - ), - ), - SizedBox(height: SizeConfig.height * .08), - ButtonView( - name: 'Next', - onPressed: () { - provider.next(context).then((value) { - if (value) { - routePush(context, - page: const ConfirmBankAccount()); + TextFormView( + name: 'Account Owner Name', + hintText: 'Input Account Name', + ctrl: provider.ctrlNameAccountBank, + validator: (value) { + if (value!.isEmpty) { + return 'Field must be filled'; } - }); - }, - ) - ], + return null; + }, + ), + const Text( + "Make sure the account you use is in your name, not someone else's", + style: TextStyle( + color: ColorPalette.slate400, + ), + ), + SizedBox(height: SizeConfig.height * .08), + ButtonView( + name: 'Next', + onPressed: () { + if (provider.formKeySubmitDataBank.currentState! + .validate()) { + provider + .submitDataBank( + bankName: provider.ctrlBankName.text, + accountNumber: provider.ctrlNoAccountBank.text, + accountName: provider.ctrlNameAccountBank.text, + ) + .then((values) { + provider.next(context).then((value) { + if (value) { + routePush(context, + page: const ConfirmBankAccount(), + arguments: values); + } + }); + }); + } + }, + ) + ], + ), ), ); }), diff --git a/lib/features/auth/registration/view/submission_data/submit_email.dart b/lib/features/auth/registration/view/submission_data/submit_email.dart index 80f8ccc..5eccf81 100644 --- a/lib/features/auth/registration/view/submission_data/submit_email.dart +++ b/lib/features/auth/registration/view/submission_data/submit_email.dart @@ -61,7 +61,6 @@ class SubmitEmail extends StatelessWidget { } showEmailVerify(BuildContext context, SubmissionDataViewModel provider) { - Navigator.pop(context); showModalBottomSheet( context: context, isScrollControlled: true, diff --git a/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart b/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart index 46da7a0..38314be 100644 --- a/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart +++ b/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart @@ -1,5 +1,6 @@ import 'package:camera/camera.dart'; import 'package:cims_apps/application/component/select_form/select_form_view.dart'; +import 'package:cims_apps/features/auth/registration/view/submission_data/data_bank/confirm_bank_account.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -16,11 +17,14 @@ class SubmissionDataViewModel extends ChangeNotifier { var formKeyPersonalData = GlobalKey(); var formKeySubmitEmail = GlobalKey(); var formKeySubmitIdCard = GlobalKey(); + var formKeySubmitDataBank = GlobalKey(); TextEditingController ctrlOccupation = TextEditingController(); TextEditingController ctrlIncome = TextEditingController(); TextEditingController ctrlMarital = TextEditingController(); TextEditingController ctrlSourceFund = TextEditingController(); TextEditingController ctrlBankName = TextEditingController(); + TextEditingController ctrlNameAccountBank = TextEditingController(); + TextEditingController ctrlNoAccountBank = TextEditingController(); TextEditingController ctrlBankNameSearch = TextEditingController(); TextEditingController ctrlBirthDate = TextEditingController(); int step = 1; @@ -122,4 +126,21 @@ class SubmissionDataViewModel extends ChangeNotifier { valueBank = value; notifyListeners(); } + + List listDataBank = []; + + Future?> submitDataBank( + {required String bankName, accountNumber, accountName}) async { + List listResponse = [ + ModelDataBank('Bank Name', bankName), + ModelDataBank('Account Number', accountNumber), + ModelDataBank('Account Owner Name', accountName), + ModelDataBank('Name on ID card', accountName), + ]; + if (listResponse.first.subtitle != null) { + // listDataBank = listResponse; + return listResponse; + } + return null; + } }