From 0b754bf939ccf5f013c5273c91d27875749060b1 Mon Sep 17 00:00:00 2001 From: Dian Bayu Nugroho Date: Mon, 5 Feb 2024 18:09:41 +0700 Subject: [PATCH 1/3] add plugin provider --- pubspec.lock | 16 ++++++++++++++++ pubspec.yaml | 1 + 2 files changed, 17 insertions(+) diff --git a/pubspec.lock b/pubspec.lock index c9172e4..ae75197 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -227,6 +227,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" octo_image: dependency: transitive description: @@ -339,6 +347,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.7.4" + provider: + dependency: "direct main" + description: + name: provider + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + url: "https://pub.dev" + source: hosted + version: "6.1.1" remove_emoji_input_formatter: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 3ec0147..39356dc 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,6 +39,7 @@ dependencies: flutter_svg: ^1.1.6 cached_network_image: ^3.2.3 remove_emoji_input_formatter: ^0.0.1+1 + provider: ^6.1.1 From 1616f22925923be6868fb079ae87c3f70bb55abf Mon Sep 17 00:00:00 2001 From: Dian Bayu Nugroho Date: Mon, 5 Feb 2024 18:10:28 +0700 Subject: [PATCH 2/3] add initial take photo --- assets/icons/icon-shield.png | Bin 0 -> 1665 bytes lib/application/assets/path_assets.dart | 1 + .../select_form/select_form_view.dart | 176 ++++++++++++++++++ .../submission_data/initial_take_photo.dart | 91 +++++++++ .../viewmodel/submission_data_viewmodel.dart | 31 +++ 5 files changed, 299 insertions(+) create mode 100644 assets/icons/icon-shield.png create mode 100644 lib/application/component/select_form/select_form_view.dart create mode 100644 lib/features/auth/registration/view/submission_data/initial_take_photo.dart create mode 100644 lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart diff --git a/assets/icons/icon-shield.png b/assets/icons/icon-shield.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a9572d3ab6af1c308daaf481a459e62494aa10 GIT binary patch literal 1665 zcmV-{27dX8P)@~0drDELIAGL9O(c600d`2O+f$vv5yP{!Grc1`0p!t@;XnLKUKXL*xHU#gW|`)FXr= z%&NR*N^wCGv=MK0`@;?hFG{!&67cov*4sy*0l7C@8W5@<-933H2?b%6;~BfQwa|f_ z$W^@C&GQB`fCdH=X2V7Xn`Z}$ZODOK#G5_ZqL5KoHTJU}OfnUZMEmNayMv5L(J*cQ zW-|oq<fRXG8SzZTRvV}WphqlJikBtM?3%!8xYJ8 zG@vb`(fU#~UZg4H+~Sc~m5y8I9PZ1JuL1f97DZdy+avVE$(c3ZC>={Ye{$aWT&sdX zO|K4y@g0Cy2V`|%%*>%lrU$|?V_*vuCn)4O@Qw?v4YhAN_T$MOazwma+kb6vXqC4u z5(xYU9-Ns_k_-kl9-csvLFgdEUB~-(;q-7(T2|bY->S~%)_kA0vVD$FU`V*LgQds) z-`(1Nzrg{22ZdaLK95<$!V#|yZybSQDo|t)ZAZA7b9RCYy5$GQt;+3GZ(x1mkT9LH%4%>z4^A@TA*p z89N5uAzR`(k+vjAo0^ajj0rmskK3R*(``vFC721^IQGS>dXDnQlh)yhQ+1c+!s{9$ z?k4$N4Q$B>uIt*D&dm#@>hWGBn4_b?rt#?fs`_ua<*<4SbE-go0miJA$7Zb9j zBNrfg>v;&Q4T@kc8<}THL9Af)BN|O?$uJDX3p)0uXTcXLaKIbuBc}bX1Y-|n#8Dy4JnI>Sawxkci`H1HnD_$_#wIL&-1kBx*1jtq6 z_BaO+nR=w?W0+l?G6}f4^>*REZ@;$aGi~@2kbght6VVbUZl99YfcE@1;2Psc-QnWc z#fgb|+bsJ&U2#1(a^Yg4c+}1XsP}#P!mOxiA~CgM!1F3Ca@KI&n6fxQOcjq_y+IRo zxMs+epw^_QBVyI6T({;+`Ib0y@7RSt*QWW(XY{;JtvEj#TRdvMMmL{OxT2ug1UVDi zT8{OMiAv09-Yekh_J4wj&1wByKZ)z}sN(V}`aepK_HTiY!_05Dxc%dKOHSYR;0iD< zuN;S&#UrkQfU^om%q1RCWC7<9j+k3KqKE>{D;$xEctnu|OhY&#HSvgG;|ML8>$#&y z`Z%&9Nk`QvQWcN5+k9hs+<4x7O_E0Vdp5`b$M listItem; + final ValueChanged onSelect; + final FormFieldValidator? validator; + final _borderRadius = const Radius.circular(24); + final bool? enabled; + const SelectFormView( + {Key? key, + required this.name, + this.hintText, + this.hintTextStyle, + this.ctrl, + this.bottomSheetTitle, + required this.listItem, + required this.onSelect, + this.validator, + this.enabled}) + : super(key: key); + + @override + Widget build(BuildContext context) { + bottomSheet() { + showModalBottomSheet( + context: context, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: _borderRadius, + topRight: _borderRadius, + ), + ), + builder: (BuildContext context) { + ItemSelectForm? selectedForm; + String? selectedKey; + if (listItem.isNotEmpty) { + var res = listItem.where((element) => element.key == selectedKey); + if (res.isNotEmpty) { + selectedForm = res.first; + } + } + return StatefulBuilder(builder: ( + BuildContext context, + StateSetter stateSetter, + ) { + return Container( + height: SizeConfig.height * .45, + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + bottomSheetTitle ?? Container(), + // const SizedBox(height: 16), + Expanded( + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Column( + children: [ + ...listItem.map( + (e) => Card( + elevation: 0, + color: Colors.transparent, + shape: const RoundedRectangleBorder( + side: BorderSide( + color: ColorPalette.greyBorder, + ), + borderRadius: + BorderRadius.all(Radius.circular(12)), + ), + child: ListTile( + title: Text( + e.text, + style: const TextStyle( + fontSize: 14, + ), + ), + subtitle: e.description != null + ? Text( + e.description!, + maxLines: 2, + overflow: TextOverflow.ellipsis, + ) + : null, + // trailing: const Icon( + // Icons.check_circle, + // color: ColorPalette.primary, + // ), + trailing: Radio( + focusColor: ColorPalette.primary, + activeColor: ColorPalette.primary, + visualDensity: const VisualDensity( + horizontal: VisualDensity.minimumDensity, + vertical: VisualDensity.minimumDensity, + ), + materialTapTargetSize: + MaterialTapTargetSize.shrinkWrap, + value: e.key, + groupValue: selectedKey, + onChanged: (value) { + // selectedForm = + // ItemSelectForm(e.key, e.text); + // stateSetter(() { + // selectedKey = selectedForm!.key; + // }); + }, + ), + onTap: () { + ctrl?.text = e.text; + onSelect(e.key); + Navigator.of(context).pop(); + }, + ), + ), + ), + ], + ), + ), + ), + ButtonView( + name: 'Select', + marginVertical: 4.0, + onPressed: () { + // print('object $') + }, + ) + ], + ), + ); + }); + }, + ); + } + + return TextFormView( + name: name, + readOnly: true, + enabled: enabled ?? true, + onTap: () { + if (listItem.isNotEmpty) bottomSheet(); + }, + validator: validator, + hintText: hintText, + hintTextStyle: hintTextStyle, + ctrl: ctrl, + suffixIcon: Icon( + Icons.keyboard_arrow_down, + size: SizeConfig.width * .07, + ), + ); + } +} diff --git a/lib/features/auth/registration/view/submission_data/initial_take_photo.dart b/lib/features/auth/registration/view/submission_data/initial_take_photo.dart new file mode 100644 index 0000000..10f20a2 --- /dev/null +++ b/lib/features/auth/registration/view/submission_data/initial_take_photo.dart @@ -0,0 +1,91 @@ +import 'package:cims_apps/application/assets/path_assets.dart'; +import 'package:cims_apps/application/component/button/button_view.dart'; +import 'package:cims_apps/application/component/image/image_view.dart'; +import 'package:cims_apps/application/component/text_caption/text_caption.dart'; +import 'package:cims_apps/application/theme/color_palette.dart'; +import 'package:cims_apps/core/utils/size_config.dart'; +import 'package:flutter/material.dart'; + +class InitialTakePhoto extends StatelessWidget { + const InitialTakePhoto({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + List listImg = [ + {'urlImg': PathAssets.imgKtpBlur, 'tag': 'Blurry Photo'}, + {'urlImg': PathAssets.imgKtpLight, 'tag': 'Light Reflection'}, + {'urlImg': PathAssets.imgKtpCropped, 'tag': 'Cropped Photo'}, + {'urlImg': PathAssets.imgKtpClear, 'tag': 'Clear Photo'}, + ]; + return SizedBox( + height: SizeConfig.height * .75, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const TextCaption( + title: 'Take a photo your ID card', + subtitle: + 'Make sure your photo is clearly legible for identity verification purposes', + ), + SizedBox( + width: SizeConfig.height, + child: Wrap( + alignment: WrapAlignment.spaceBetween, + spacing: 10, + runSpacing: 10, + children: List.generate(listImg.length, (index) { + final urlList = listImg[index]['urlImg']; + final tag = listImg[index]['tag']; + return Column( + children: [ + ImageView( + image: urlList, + width: SizeConfig.width * .42, + ), + const SizedBox( + height: 8, + ), + Text( + tag, + style: const TextStyle( + color: ColorPalette.slate800, + fontWeight: FontWeight.w600), + ), + ], + ); + }), + ), + ), + // const Spacer(), + const Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ImageView( + image: PathAssets.iconShield, + width: 20, + height: 22, + ), + SizedBox( + width: 8, + ), + Expanded( + child: Text( + 'In accordance with OJK regulations, an ID card is required to purchase mutual funds.', + style: TextStyle( + fontWeight: FontWeight.w600, + color: ColorPalette.primary, + ), + ), + ) + ], + ), + ButtonView( + name: 'Take a Photo', + marginVertical: 16.0, + onPressed: () {}, + ) + ], + ), + ); + } +} diff --git a/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart b/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart new file mode 100644 index 0000000..c7a97fb --- /dev/null +++ b/lib/features/auth/registration/viewmodel/submission_data_viewmodel.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; + +class SubmissionDataViewModel extends ChangeNotifier { + int currentStep = 1; + int stepAmount = 9; + bool _isEmailVerify = false; + bool get isEmailVerify => _isEmailVerify; + + submitEmail() { + _isEmailVerify = !_isEmailVerify; + notifyListeners(); + } + + onWillPopSubmission(BuildContext context) { + if (currentStep != 1) { + currentStep--; + notifyListeners(); + } else { + Navigator.of(context).pop(true); + } + } + + nextSubmission(BuildContext context) { + if (currentStep < stepAmount) { + currentStep++; + } else { + //ToDo : Go To next step after completing the submission + } + notifyListeners(); + } +} From ff1886cec17e7fecd22cfeb004d8d588b1cb7fd7 Mon Sep 17 00:00:00 2001 From: Dian Bayu Nugroho Date: Mon, 5 Feb 2024 18:11:16 +0700 Subject: [PATCH 3/3] fix: submission data regis --- .../component/text_form/text_form_view.dart | 8 +- .../registration/view/registration_view.dart | 3 +- .../submission_data/submission_parent.dart | 132 +++++++++--------- .../view/submission_data/submit_email.dart | 74 +++++++++- .../submission_data/submit_personal_data.dart | 52 ++++++- 5 files changed, 183 insertions(+), 86 deletions(-) diff --git a/lib/application/component/text_form/text_form_view.dart b/lib/application/component/text_form/text_form_view.dart index a533305..8540251 100644 --- a/lib/application/component/text_form/text_form_view.dart +++ b/lib/application/component/text_form/text_form_view.dart @@ -155,7 +155,7 @@ class TextFormView extends StatelessWidget { hintStyle: hintTextStyle ?? const TextStyle( fontSize: 14, - color: Colors.grey, + color: ColorPalette.greyFont, fontWeight: FontWeight.normal, ), isDense: true, @@ -167,19 +167,19 @@ class TextFormView extends StatelessWidget { disabledBorder: OutlineInputBorder( borderRadius: _borderRadius, borderSide: BorderSide( - color: disabledborderColor ?? ColorPalette.greyFont, + color: disabledborderColor ?? ColorPalette.greyBorder, ), ), enabledBorder: OutlineInputBorder( borderRadius: _borderRadius, borderSide: BorderSide( - color: enabledborderColor ?? ColorPalette.greyBase, + color: enabledborderColor ?? ColorPalette.greyBorder, ), ), focusedBorder: OutlineInputBorder( borderRadius: _borderRadius, borderSide: BorderSide( - color: focusedBorderColor ?? ColorPalette.greyBase, + color: focusedBorderColor ?? ColorPalette.greyBorder, ), ), border: OutlineInputBorder(borderRadius: _borderRadius), diff --git a/lib/features/auth/registration/view/registration_view.dart b/lib/features/auth/registration/view/registration_view.dart index 4995bec..b98fb40 100644 --- a/lib/features/auth/registration/view/registration_view.dart +++ b/lib/features/auth/registration/view/registration_view.dart @@ -3,7 +3,6 @@ import 'package:cims_apps/application/component/text_caption/text_caption.dart'; import 'package:cims_apps/application/component/text_form/text_form_view.dart'; import 'package:cims_apps/core/route/route.dart'; import 'package:cims_apps/features/auth/registration/view/initial_registration_step.dart'; -import 'package:cims_apps/features/bottom_navigation_view.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; @@ -42,7 +41,7 @@ class RegistrationView extends StatelessWidget { text: 'Already have an account? ', style: TextStyle( color: Colors.black, - decoration: TextDecoration.underline, + decoration: TextDecoration.none, ), ), TextSpan( diff --git a/lib/features/auth/registration/view/submission_data/submission_parent.dart b/lib/features/auth/registration/view/submission_data/submission_parent.dart index 12d67a3..6c962f4 100644 --- a/lib/features/auth/registration/view/submission_data/submission_parent.dart +++ b/lib/features/auth/registration/view/submission_data/submission_parent.dart @@ -1,9 +1,12 @@ import 'package:cims_apps/application/component/button/button_view.dart'; import 'package:cims_apps/application/theme/color_palette.dart'; import 'package:cims_apps/core/utils/size_config.dart'; +import 'package:cims_apps/features/auth/registration/view/submission_data/initial_take_photo.dart'; import 'package:cims_apps/features/auth/registration/view/submission_data/submit_email.dart'; import 'package:cims_apps/features/auth/registration/view/submission_data/submit_personal_data.dart'; +import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class SubmissionParent extends StatefulWidget { static const routeName = '/SubmissionParent'; @@ -14,29 +17,16 @@ class SubmissionParent extends StatefulWidget { } class _SubmissionParentState extends State { - int _currentStep = 1; - final int _stepAmount = 9; Widget _stepItem({bool isCurrentStep = false, bool isDone = false}) { - return GestureDetector( - onTap: () { - setState(() { - if (_currentStep > 1) { - _currentStep--; - } else if (_currentStep == 1) { - _currentStep++; - } - }); - }, - child: Container( - margin: const EdgeInsets.only(right: 4.0, left: 4.0), - height: 6, - width: SizeConfig.width * .08, - decoration: BoxDecoration( - color: isCurrentStep || isDone - ? ColorPalette.primary - : ColorPalette.greyBorderNeutrals, - borderRadius: BorderRadius.circular(50), - ), + return Container( + margin: const EdgeInsets.only(right: 4.0, left: 4.0), + height: 6, + width: SizeConfig.width * .08, + decoration: BoxDecoration( + color: isCurrentStep || isDone + ? ColorPalette.primary + : ColorPalette.greyBorderNeutrals, + borderRadius: BorderRadius.circular(50), ), ); } @@ -48,9 +38,7 @@ class _SubmissionParentState extends State { case 2: return const SubmitEmail(); case 3: - return Container( - child: Text("Step 3"), - ); + return const InitialTakePhoto(); case 4: return Container( child: Text("Step 4"), @@ -80,48 +68,58 @@ class _SubmissionParentState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text('Registration'), - ), - body: Stack( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, vertical: 16.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: List.generate( - _stepAmount, - (index) => _stepItem( - isCurrentStep: _currentStep == index + 1, - ), - ), - ), - ), - Container( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: _content(_currentStep), - ) - ], - ), - Align( - alignment: Alignment.bottomCenter, - child: ButtonView( - name: 'Next', - marginVertical: 16.0, - onPressed: () { - setState(() { - _currentStep++; - }); - }, + return ChangeNotifierProvider( + create: (context) => SubmissionDataViewModel(), + builder: (context, child) { + return Scaffold( + appBar: AppBar( + title: const Text('Registration'), ), - ) - ], - ), - ); + body: Stack( + children: [ + Consumer( + builder: (context, provider, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 16.0, vertical: 16.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: List.generate( + provider.stepAmount, + (index) => _stepItem( + isCurrentStep: provider.currentStep == index + 1, + ), + ), + ), + ), + Expanded( + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: _content(provider.currentStep), + ), + ), + provider.currentStep == 3 + ? const SizedBox() + : Align( + alignment: Alignment.bottomCenter, + child: ButtonView( + name: 'Next', + marginVertical: 16.0, + onPressed: () { + provider.nextSubmission(context); + }, + ), + ) + ], + ); + }), + ], + ), + ); + }); } } 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 c5d086c..a1c6de1 100644 --- a/lib/features/auth/registration/view/submission_data/submit_email.dart +++ b/lib/features/auth/registration/view/submission_data/submit_email.dart @@ -1,21 +1,81 @@ +import 'package:cims_apps/application/assets/path_assets.dart'; +import 'package:cims_apps/application/component/image/image_view.dart'; import 'package:cims_apps/application/component/text_caption/text_caption.dart'; import 'package:cims_apps/application/component/text_form/text_form_view.dart'; +import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart'; +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class SubmitEmail extends StatelessWidget { const SubmitEmail({Key? key}) : super(key: key); - @override - Widget build(BuildContext context) { + Widget _emailVerify() { return Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - const TextCaption(title: 'Enter your e-mail'), - TextFormView( - name: 'E-mail Address', - hintText: 'Input e-mail address', + const ImageView(image: PathAssets.imgEmail), + Align( + alignment: Alignment.center, + child: RichText( + textAlign: TextAlign.center, + text: TextSpan(children: [ + const TextSpan( + text: + 'We have sent a verification link to your e-mail. \nPlease check your email for ', + style: TextStyle( + color: Colors.black, + decoration: TextDecoration.none, + ), + ), + TextSpan( + recognizer: TapGestureRecognizer() + ..onTap = () { + print('object'); + }, + text: 'verification', + style: const TextStyle( + color: Colors.blue, + ), + ), + const TextSpan( + text: ' to \ncontinue registration.', + style: TextStyle( + color: Colors.black, + decoration: TextDecoration.none, + ), + ), + ]), + ), ), ], ); } + + @override + Widget build(BuildContext context) { + return ChangeNotifierProvider( + create: (context) => SubmissionDataViewModel(), + builder: (context, child) { + return Consumer( + builder: (context, provider, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + !provider.isEmailVerify + ? const TextCaption(title: 'Enter your e-mail') + : const TextCaption(title: 'Check your e-mail '), + !provider.isEmailVerify + ? TextFormView( + name: 'E-mail Address', + hintText: 'Input e-mail address', + onTap: () { + provider.submitEmail(); + }, + ) + : _emailVerify(), + ], + ); + }); + }); + } } diff --git a/lib/features/auth/registration/view/submission_data/submit_personal_data.dart b/lib/features/auth/registration/view/submission_data/submit_personal_data.dart index bf33455..1b8b389 100644 --- a/lib/features/auth/registration/view/submission_data/submit_personal_data.dart +++ b/lib/features/auth/registration/view/submission_data/submit_personal_data.dart @@ -1,16 +1,56 @@ +import 'package:cims_apps/application/component/select_form/select_form_view.dart'; import 'package:cims_apps/application/component/text_caption/text_caption.dart'; +import 'package:cims_apps/application/theme/color_palette.dart'; +import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class SubmitPersonalData extends StatelessWidget { const SubmitPersonalData({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextCaption(title: 'Your personal details'), - ], - ); + List listForm = [ + ItemSelectForm('key1', 'text'), + ItemSelectForm('key2', 'text'), + ItemSelectForm('key3', 'text'), + ItemSelectForm('key4', 'text'), + ItemSelectForm('key5', 'text'), + ]; + return ChangeNotifierProvider( + create: (context) => SubmissionDataViewModel(), + builder: (context, child) { + return Consumer( + builder: (context, provider, child) { + return SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const TextCaption(title: 'Your personal details'), + SelectFormView( + name: 'Occupation', + hintText: 'Select occupation ', + bottomSheetTitle: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text('Occupation'), + IconButton( + onPressed: () => Navigator.pop(context), + icon: const Icon( + Icons.clear, + size: 20, + color: ColorPalette.greyBase, + )), + ], + ), + listItem: listForm, + onSelect: (value) {}, + ), + ], + ), + ); + }); + }); } }