feat(form): add list option validator
This commit is contained in:
@@ -135,6 +135,112 @@ class _IbanInput extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _CheckListInput extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocBuilder<FormDataCubit, FormDataState>(
|
||||
builder: (context, state) {
|
||||
final _input =
|
||||
state.data.input<List<String>>(formFieldList) as ListOption<String>;
|
||||
final _options = _input.value;
|
||||
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
ListTile(
|
||||
title: const Text('Checkbox1'),
|
||||
trailing: Checkbox(
|
||||
value: _options.contains('checkbox1'),
|
||||
onChanged: (_) {
|
||||
context.read<FormDataCubit>().dataChanged(
|
||||
formFieldList,
|
||||
_input.select('checkbox1'),
|
||||
);
|
||||
}),
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Checkbox2'),
|
||||
trailing: Checkbox(
|
||||
value: _options.contains('checkbox2'),
|
||||
onChanged: (_) {
|
||||
context.read<FormDataCubit>().dataChanged(
|
||||
formFieldList,
|
||||
_input.select('checkbox2'),
|
||||
);
|
||||
}),
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Checkbox3 (default)'),
|
||||
trailing: Checkbox(
|
||||
value: _options.contains('checkbox3'),
|
||||
onChanged: (_) {
|
||||
context.read<FormDataCubit>().dataChanged(
|
||||
formFieldList,
|
||||
_input.select('checkbox3'),
|
||||
);
|
||||
}),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _RadioListInput extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocBuilder<FormDataCubit, FormDataState>(
|
||||
builder: (context, state) {
|
||||
final _input =
|
||||
state.data.input<String>(formFieldRadio) as TextString;
|
||||
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
ListTile(
|
||||
title: const Text('Radio1'),
|
||||
trailing: Radio<bool>(
|
||||
groupValue: true,
|
||||
value: _input.value == 'radio1',
|
||||
onChanged: (_) {
|
||||
context.read<FormDataCubit>().dataChanged(
|
||||
formFieldRadio,
|
||||
const TextString.dirty('radio1'),
|
||||
);
|
||||
}),
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Radio2'),
|
||||
trailing: Radio<bool>(
|
||||
groupValue: true,
|
||||
value: _input.value == 'radio2',
|
||||
onChanged: (_) {
|
||||
context.read<FormDataCubit>().dataChanged(
|
||||
formFieldRadio,
|
||||
const TextString.dirty('radio2'),
|
||||
);
|
||||
}),
|
||||
),
|
||||
ListTile(
|
||||
title: const Text('Radio3'),
|
||||
trailing: Radio<bool>(
|
||||
groupValue: true,
|
||||
value: _input.value == 'radio3',
|
||||
onChanged: (_) {
|
||||
context.read<FormDataCubit>().dataChanged(
|
||||
formFieldRadio,
|
||||
const TextString.dirty('radio3'),
|
||||
);
|
||||
}),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _CheckHiddenInput extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -201,8 +307,7 @@ class _SignUpButton extends StatelessWidget {
|
||||
? const CircularProgressIndicator()
|
||||
: ElevatedButton(
|
||||
onPressed: state.status.isValidated
|
||||
? () =>
|
||||
context.read<FormDataCubit>().submitForm()
|
||||
? () => context.read<FormDataCubit>().submitForm()
|
||||
: null,
|
||||
child: const Text('SIGN UP'),
|
||||
);
|
||||
@@ -244,42 +349,43 @@ class SignUpForm extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
},
|
||||
child: SizedBox(
|
||||
height: MediaQuery.of(context).size.height,
|
||||
child: Align(
|
||||
alignment: const Alignment(0, -1 / 3),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
_NameInput(),
|
||||
const SizedBox(height: 8),
|
||||
_EmailInput(),
|
||||
const SizedBox(height: 8),
|
||||
_PhoneInput(),
|
||||
const SizedBox(height: 8),
|
||||
_CheckHiddenInput(),
|
||||
const SizedBox(height: 8),
|
||||
_CheckIsProInput(),
|
||||
const SizedBox(height: 8),
|
||||
BlocBuilder<FormDataCubit, FormDataState>(
|
||||
builder: (context, state) {
|
||||
if (state.data.input<bool>(formFieldPro).value) {
|
||||
return Column(children: [
|
||||
_SirenInput(),
|
||||
const SizedBox(height: 8),
|
||||
_IbanInput(),
|
||||
const SizedBox(height: 8),
|
||||
]);
|
||||
}
|
||||
return const SizedBox.shrink();
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
_SignUpButton(),
|
||||
const SizedBox(height: 8),
|
||||
_DebugButton(),
|
||||
],
|
||||
),
|
||||
child: Align(
|
||||
alignment: const Alignment(0, -1 / 3),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
_NameInput(),
|
||||
const SizedBox(height: 8),
|
||||
_EmailInput(),
|
||||
const SizedBox(height: 8),
|
||||
_PhoneInput(),
|
||||
const SizedBox(height: 8),
|
||||
_CheckListInput(),
|
||||
const SizedBox(height: 8),
|
||||
_RadioListInput(),
|
||||
const SizedBox(height: 8),
|
||||
_CheckHiddenInput(),
|
||||
const SizedBox(height: 8),
|
||||
_CheckIsProInput(),
|
||||
const SizedBox(height: 8),
|
||||
BlocBuilder<FormDataCubit, FormDataState>(
|
||||
builder: (context, state) {
|
||||
if (state.data.input<bool>(formFieldPro).value) {
|
||||
return Column(children: [
|
||||
_SirenInput(),
|
||||
const SizedBox(height: 8),
|
||||
_IbanInput(),
|
||||
const SizedBox(height: 8),
|
||||
]);
|
||||
}
|
||||
return const SizedBox.shrink();
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
_SignUpButton(),
|
||||
const SizedBox(height: 8),
|
||||
_DebugButton(),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user