Merge pull request 'bayu/dev' (#13) from bayu/dev into dev

Reviewed-on: #13
This commit is contained in:
nugrohob825 2024-02-19 22:51:02 +07:00
commit b5a382ce96
7 changed files with 184 additions and 27 deletions

View File

@ -0,0 +1,144 @@
import 'package:calendar_date_picker2/calendar_date_picker2.dart';
import 'package:cims_apps/application/component/button/button_view.dart';
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
import 'package:cims_apps/application/theme/color_palette.dart';
import 'package:cims_apps/core/utils/size_config.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class DatePickerView extends StatelessWidget {
final String name;
final TextEditingController ctrl;
final DateTime? minDate, maxDate;
final String? hintText, buttonName;
final bool isMultipleSelection, enabled;
final List<DateTime>? initialValue;
final ValueChanged<OnChangedDatePickerModel>? onChanged;
final ValueChanged<List<DateTime?>>? onFinish;
final FormFieldValidator<String>? validatorDate;
const DatePickerView(
{Key? key,
required this.name,
required this.ctrl,
this.minDate,
this.maxDate,
this.hintText,
this.buttonName,
required this.isMultipleSelection,
required this.enabled,
this.initialValue,
this.onChanged,
this.onFinish,
this.validatorDate})
: super(key: key);
String _dateFormat(DateTime? dateTime) =>
dateTime != null ? DateFormat('dd/MM/yyyy').format(dateTime) : "";
@override
Widget build(BuildContext context) {
List<DateTime?> initData = initialValue ?? [];
List<DateTime?> dateList = [];
String dateLabel() {
return dateList.map((e) => _dateFormat(e)).join(" - ");
}
onChangedDatePicker(List<DateTime?> value) {
if (isMultipleSelection) {
final pickerDateRange = PickerDateRange(
startDate: value[0] ?? DateTime.now(),
endDate:
value.length > 1 ? value[1] ?? DateTime.now() : DateTime.now(),
);
onChanged
?.call(OnChangedDatePickerModel(pickerDateRange: pickerDateRange));
} else {
onChanged?.call(OnChangedDatePickerModel(dateTime: value[0]));
}
dateList = value;
}
dialogDatePicker() {
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return Container(
padding: const EdgeInsets.only(top: 16.0),
height: SizeConfig.height * .65,
child: Column(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
children: [
CalendarDatePicker2(
value: [...initData],
config: CalendarDatePicker2Config(
centerAlignModePicker: true,
calendarType: isMultipleSelection
? CalendarDatePicker2Type.range
: CalendarDatePicker2Type.single,
customModePickerIcon: const SizedBox(),
firstDate: minDate ?? DateTime(1900),
lastDate: maxDate,
),
// initialValue: [...initData],
onValueChanged: (value) {
onChangedDatePicker(value);
},
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: ButtonView(
width: SizeConfig.width,
onPressed: () {
if (dateList.isNotEmpty) {
onFinish?.call(dateList);
ctrl.text = dateLabel();
initData = dateList;
}
Navigator.pop(context);
},
name: 'OK',
),
),
],
),
);
},
);
}
return TextFormView(
name: name,
hintText: hintText,
readOnly: true,
ctrl: ctrl,
validator: validatorDate,
enabled: enabled,
onTap: () {
if (enabled) dialogDatePicker();
},
suffixIcon: const UnconstrainedBox(
child: Icon(
Icons.calendar_today_rounded,
color: ColorPalette.slate400,
),
),
);
}
}
class OnChangedDatePickerModel {
final DateTime? dateTime;
final PickerDateRange? pickerDateRange;
OnChangedDatePickerModel({this.dateTime, this.pickerDateRange});
}
class PickerDateRange {
final DateTime startDate;
final DateTime endDate;
PickerDateRange({required this.startDate, required this.endDate});
}

View File

@ -24,13 +24,13 @@ class SubmissionParent extends StatefulWidget {
} }
class _SubmissionParentState extends State<SubmissionParent> { class _SubmissionParentState extends State<SubmissionParent> {
Widget _stepItem({bool isCurrentStep = false, bool isDone = false}) { Widget _stepItem({bool isCurrentStep = false}) {
return Container( return Container(
margin: const EdgeInsets.only(right: 0.0, left: 4.0), margin: const EdgeInsets.only(right: 0.0, left: 4.0),
height: 6, height: 6,
width: SizeConfig.width * .08, width: SizeConfig.width * .08,
decoration: BoxDecoration( decoration: BoxDecoration(
color: isCurrentStep || isDone color: isCurrentStep
? ColorPalette.primary ? ColorPalette.primary
: ColorPalette.greyBorderNeutrals, : ColorPalette.greyBorderNeutrals,
borderRadius: BorderRadius.circular(50), borderRadius: BorderRadius.circular(50),
@ -91,15 +91,10 @@ class _SubmissionParentState extends State<SubmissionParent> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: children:
List.generate(provider.stepAmount, (index) { List.generate(provider.stepAmount, (index) {
// print('indd $index');
// print(
// 'getCurrentStep ${provider.getCurrentStep}');
return _stepItem( return _stepItem(
isCurrentStep: provider.getCurrentStep == isCurrentStep:
index + 1 || provider.getCurrentStep == index + 1 ||
provider.getCurrentStep - 1 == index + 1, provider.getCurrentStep - 1 > index,
// isDone:
// index + 1 != provider.getCurrentStep + 1,
); );
}), }),
), ),

View File

@ -2,6 +2,7 @@ import 'dart:io';
import 'package:cims_apps/application/assets/path_assets.dart'; 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/button/button_view.dart';
import 'package:cims_apps/application/component/date_picker/date_picker_view.dart';
import 'package:cims_apps/application/component/image/image_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/component/text_caption/text_caption.dart';
import 'package:cims_apps/application/component/text_form/text_form_view.dart'; import 'package:cims_apps/application/component/text_form/text_form_view.dart';
@ -174,13 +175,11 @@ class SubmitDataIdCard extends StatelessWidget {
title: 'Check your ID card data for accuracy'), title: 'Check your ID card data for accuracy'),
TextFormView(name: 'NIK'), TextFormView(name: 'NIK'),
TextFormView(name: 'Full Name'), TextFormView(name: 'Full Name'),
TextFormView( DatePickerView(
name: 'Birth Date', name: 'Birth Date',
suffixIcon: const Icon( ctrl: provider.ctrlBirthDate,
Icons.calendar_today_rounded, isMultipleSelection: false,
color: ColorPalette.slate400, enabled: true),
),
),
photoDocument(provider), photoDocument(provider),
Container( Container(
width: SizeConfig.width, width: SizeConfig.width,

View File

@ -5,6 +5,7 @@ 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/application/component/text_form/text_form_view.dart';
import 'package:cims_apps/core/route/route.dart'; import 'package:cims_apps/core/route/route.dart';
import 'package:cims_apps/core/utils/size_config.dart'; import 'package:cims_apps/core/utils/size_config.dart';
import 'package:cims_apps/core/utils/string_utils.dart';
import 'package:cims_apps/features/auth/registration/view/submission_data/submission_parent.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:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
@ -32,10 +33,7 @@ class SubmitEmail extends StatelessWidget {
), ),
), ),
TextSpan( TextSpan(
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()..onTap = () {},
..onTap = () {
print('object');
},
text: 'verification', text: 'verification',
style: const TextStyle( style: const TextStyle(
color: Colors.blue, color: Colors.blue,
@ -74,6 +72,16 @@ class SubmitEmail extends StatelessWidget {
? TextFormView( ? TextFormView(
name: 'E-mail Address', name: 'E-mail Address',
hintText: 'Input e-mail address', hintText: 'Input e-mail address',
keyboardType: TextInputType.emailAddress,
validator: (value) {
if (value!.isEmpty) {
return 'Filled cannot be empty';
} else if (!StringUtils.emailValidation(value)) {
return 'Format email wrong';
} else {
return null;
}
},
// onTap: () { // onTap: () {
// provider.submitEmail(); // provider.submitEmail();
// }, // },

View File

@ -19,6 +19,7 @@ class SubmissionDataViewModel extends ChangeNotifier {
TextEditingController ctrlMarital = TextEditingController(); TextEditingController ctrlMarital = TextEditingController();
TextEditingController ctrlSourceFund = TextEditingController(); TextEditingController ctrlSourceFund = TextEditingController();
TextEditingController ctrlBankName = TextEditingController(); TextEditingController ctrlBankName = TextEditingController();
TextEditingController ctrlBirthDate = TextEditingController();
int step = 1; int step = 1;
List<ItemSelectForm> listOccupation = [ List<ItemSelectForm> listOccupation = [

View File

@ -49,6 +49,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.1"
calendar_date_picker2:
dependency: "direct main"
description:
name: calendar_date_picker2
sha256: b91d51b8d0928f9745e0113e86d06b161ac48c52b7530337a3b77283cbc6be27
url: "https://pub.dev"
source: hosted
version: "0.5.3"
camera: camera:
dependency: "direct main" dependency: "direct main"
description: description:
@ -292,10 +300,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: js name: js
sha256: "4186c61b32f99e60f011f7160e32c89a758ae9b1d0c6d28e2c02ef0382300e2b" sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.1"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@ -625,18 +633,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: syncfusion_flutter_core name: syncfusion_flutter_core
sha256: e8580e201c7197feac830b501889e877796a9fabbe20dcdbe90a981603939101 sha256: "4eed0d3ae50c16b5e8e4957f3c1917e9bd0315a08dfb49a104ca8fc10244bef3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "24.2.4" version: "24.2.6"
syncfusion_flutter_signaturepad: syncfusion_flutter_signaturepad:
dependency: "direct main" dependency: "direct main"
description: description:
name: syncfusion_flutter_signaturepad name: syncfusion_flutter_signaturepad
sha256: "878e1063b909a83c83677627261780d42d532d0b5e7e259d84da805008e7fb0d" sha256: da55bd7d796f2c9b4707f3e063e443f67c355c6098002e446bbf43672952916e
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "24.2.4" version: "24.2.6"
synchronized: synchronized:
dependency: transitive dependency: transitive
description: description:

View File

@ -51,6 +51,8 @@ dependencies:
syncfusion_flutter_signaturepad: ^24.2.4 syncfusion_flutter_signaturepad: ^24.2.4
dotted_border: ^2.1.0 dotted_border: ^2.1.0
shared_preferences: ^2.2.2 shared_preferences: ^2.2.2
calendar_date_picker2: ^0.5.3