feat(from): add form validator class with strategy design pattern

This commit is contained in:
2022-07-14 16:59:24 +02:00
parent 61c6e637ec
commit 607b986848
29 changed files with 454 additions and 256 deletions
@@ -61,10 +61,10 @@ class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
FormDataCubit _formCubit = CustomFormCubit(inputs: getNormalFormData());
FormDataCubit formCubit = CustomFormCubit(inputs: getNormalFormData());
return BlocProvider(
create: (context) => _formCubit,
create: (context) => formCubit,
child: const WidgetTree(),
);
}
@@ -187,9 +187,9 @@ class _CheckListInput extends StatelessWidget {
Widget build(BuildContext context) {
return BlocBuilder<FormDataCubit, FormDataState>(
builder: (context, state) {
final _input =
final input =
state.data.validatorOf<ListOption<String>>(formFieldList);
final _options = _input.value;
final options = input.value;
return Column(
mainAxisSize: MainAxisSize.min,
@@ -197,33 +197,33 @@ class _CheckListInput extends StatelessWidget {
ListTile(
title: const Text('Checkbox1'),
trailing: Checkbox(
value: _options.contains('checkbox1'),
value: options.contains('checkbox1'),
onChanged: (_) {
context.read<FormDataCubit>().dataChanged(
formFieldList,
_input.select('checkbox1'),
input.select('checkbox1'),
);
}),
),
ListTile(
title: const Text('Checkbox2'),
trailing: Checkbox(
value: _options.contains('checkbox2'),
value: options.contains('checkbox2'),
onChanged: (_) {
context.read<FormDataCubit>().dataChanged(
formFieldList,
_input.select('checkbox2'),
input.select('checkbox2'),
);
}),
),
ListTile(
title: const Text('Checkbox3 (default)'),
trailing: Checkbox(
value: _options.contains('checkbox3'),
value: options.contains('checkbox3'),
onChanged: (_) {
context.read<FormDataCubit>().dataChanged(
formFieldList,
_input.select('checkbox3'),
input.select('checkbox3'),
);
}),
),
@@ -239,7 +239,7 @@ class _RadioListInput extends StatelessWidget {
Widget build(BuildContext context) {
return BlocBuilder<FormDataCubit, FormDataState>(
builder: (context, state) {
final _input = state.data.validatorOf<TextString>(formFieldRadio);
final input = state.data.validatorOf<TextString>(formFieldRadio);
return Column(
mainAxisSize: MainAxisSize.min,
@@ -248,7 +248,7 @@ class _RadioListInput extends StatelessWidget {
title: const Text('Radio1'),
trailing: Radio<bool>(
groupValue: true,
value: _input.value == 'radio1',
value: input.value == 'radio1',
onChanged: (_) {
context.read<FormDataCubit>().dataChanged(
formFieldRadio,
@@ -260,7 +260,7 @@ class _RadioListInput extends StatelessWidget {
title: const Text('Radio2'),
trailing: Radio<bool>(
groupValue: true,
value: _input.value == 'radio2',
value: input.value == 'radio2',
onChanged: (_) {
context.read<FormDataCubit>().dataChanged(
formFieldRadio,
@@ -272,7 +272,7 @@ class _RadioListInput extends StatelessWidget {
title: const Text('Radio3'),
trailing: Radio<bool>(
groupValue: true,
value: _input.value == 'radio3',
value: input.value == 'radio3',
onChanged: (_) {
context.read<FormDataCubit>().dataChanged(
formFieldRadio,
@@ -378,6 +378,20 @@ class _DebugButton extends StatelessWidget {
}
}
class _ResetButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<FormDataCubit, FormDataState>(
builder: (context, state) {
return ElevatedButton(
onPressed: () => context.read<FormDataCubit>().resetForm(),
child: const Text('RESET'),
);
},
);
}
}
class SignUpForm extends StatelessWidget {
const SignUpForm({Key? key}) : super(key: key);
@@ -431,6 +445,8 @@ class SignUpForm extends StatelessWidget {
_SignUpButton(),
const SizedBox(height: 8),
_DebugButton(),
const SizedBox(height: 8),
_ResetButton(),
],
),
),