From 08383ec03bcb7b7458c6cc368fe72edc283e6eb9 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 16 Nov 2022 16:00:13 -0500 Subject: [PATCH] refactor(form)!: input builders provides FormInput --- .../example/lib/sign_up/widgets/sign_up_form.dart | 12 ++++++------ .../lib/sign_up/widgets/simple_sign_up_form.dart | 5 ++--- .../features/widgets/input_builder.dart | 10 +++++----- .../features/widgets/input_builder_metadata.dart | 14 +++++++++----- .../widgets/input_builder_text_controller.dart | 14 +++++++++----- 5 files changed, 31 insertions(+), 24 deletions(-) diff --git a/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart b/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart index c1727ce5..fd87bc2d 100644 --- a/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart +++ b/packages/wyatt_form_bloc/example/lib/sign_up/widgets/sign_up_form.dart @@ -39,7 +39,7 @@ class _NameInput extends StatelessWidget { return InputBuilderTextController( field: formFieldName, builder: - (context, cubit, state, field, inputValid, controller, metadata) { + (context, cubit, state, field, input, controller, metadata) { final meta = state.form.metadataOf(field).extra; final color = computeColor(meta); return Row( @@ -65,7 +65,7 @@ class _NameInput extends StatelessWidget { decoration: InputDecoration( labelText: 'name', helperText: '', - errorText: !inputValid ? 'invalid name' : null, + errorText: input.validator.invalid ? 'invalid name' : null, ), ), ) @@ -81,7 +81,7 @@ class _PhoneInput extends StatelessWidget { Widget build(BuildContext context) { return InputBuilderMetadata( field: formFieldPhone, - builder: (context, cubit, state, field, inputValid, metadata) { + builder: (context, cubit, state, field, input, metadata) { final meta = state.form.metadataOf(field).extra; final color = computeColor(meta); return Row( @@ -106,7 +106,7 @@ class _PhoneInput extends StatelessWidget { decoration: InputDecoration( labelText: 'phone', helperText: '', - errorText: !inputValid ? 'invalid phone' : null, + errorText: input.validator.invalid ? 'invalid phone' : null, ), ), ) @@ -122,13 +122,13 @@ class _EmailInput extends StatelessWidget { Widget build(BuildContext context) { return InputBuilder( field: formFieldEmail, - builder: (context, cubit, state, field, inputValid) => TextField( + builder: (context, cubit, state, field, input) => TextField( onChanged: (value) => cubit.dataChanged(field, Email.dirty(value)), keyboardType: TextInputType.emailAddress, decoration: InputDecoration( labelText: 'email', helperText: '', - errorText: !inputValid ? 'invalid email' : null, + errorText: input.validator.invalid ? 'invalid email' : null, ), ), ); diff --git a/packages/wyatt_form_bloc/example/lib/sign_up/widgets/simple_sign_up_form.dart b/packages/wyatt_form_bloc/example/lib/sign_up/widgets/simple_sign_up_form.dart index a3a93310..c2dbe7ce 100644 --- a/packages/wyatt_form_bloc/example/lib/sign_up/widgets/simple_sign_up_form.dart +++ b/packages/wyatt_form_bloc/example/lib/sign_up/widgets/simple_sign_up_form.dart @@ -25,8 +25,7 @@ class _NameInput extends StatelessWidget { Widget build(BuildContext context) { return InputBuilderTextController( field: formFieldName, - builder: - (context, cubit, state, field, inputValid, controller, metadata) { + builder: (context, cubit, state, field, input, controller, metadata) { return TextField( controller: controller, onChanged: (value) => cubit.dataChanged(field, Name.dirty(value)), @@ -34,7 +33,7 @@ class _NameInput extends StatelessWidget { decoration: InputDecoration( labelText: 'name', helperText: '', - errorText: !inputValid ? 'invalid name' : null, + errorText: input.validator.invalid ? 'invalid name' : null, ), ); }, diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder.dart index c6cb9006..8b22fbea 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder.dart @@ -28,16 +28,16 @@ class InputBuilder extends StatelessWidget { Cubit cubit, FormDataState state, String field, - bool inputValid, + FormInput, dynamic> + input, ) builder; @override - Widget build(BuildContext context) => - BlocBuilder( + Widget build(BuildContext context) => BlocBuilder( builder: (context, state) { final cubit = context.watch(); - final inputValid = state.form.validatorOf(field).valid; - return builder.call(context, cubit, state, field, inputValid); + final input = state.form.inputOf(field); + return builder.call(context, cubit, state, field, input); }, ); } diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_metadata.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_metadata.dart index 123287fc..fdc17743 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_metadata.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_metadata.dart @@ -16,7 +16,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_form_bloc/src/core/enums/validation_error.dart'; +import 'package:wyatt_form_bloc/src/domain/entities/form_input.dart'; import 'package:wyatt_form_bloc/src/domain/entities/form_input_metadata.dart'; +import 'package:wyatt_form_bloc/src/domain/input_validators/form_input_validator.dart'; import 'package:wyatt_form_bloc/src/presentation/presentation.dart'; class InputBuilderMetadata @@ -34,22 +37,23 @@ class InputBuilderMetadata Cubit cubit, FormDataState state, String field, - bool inputValid, + FormInput, dynamic> + input, FormInputMetadata? metadata, ) builder; @override Widget build(BuildContext context) => BlocBuilder( builder: (context, state) { - final cubit = context.read(); - final inputValid = state.form.validatorOf(field).valid; - final metadata = state.form.metadataOf(field); + final cubit = context.watch(); + final input = state.form.inputOf(field); + final metadata = input.metadata as FormInputMetadata?; return builder.call( context, cubit, state, field, - inputValid, + input, metadata, ); }, diff --git a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart index 17f5c16e..999c9104 100644 --- a/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart +++ b/packages/wyatt_form_bloc/lib/src/presentation/features/widgets/input_builder_text_controller.dart @@ -16,7 +16,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wyatt_form_bloc/src/core/enums/validation_error.dart'; +import 'package:wyatt_form_bloc/src/domain/entities/form_input.dart'; import 'package:wyatt_form_bloc/src/domain/entities/form_input_metadata.dart'; +import 'package:wyatt_form_bloc/src/domain/input_validators/form_input_validator.dart'; import 'package:wyatt_form_bloc/src/domain/repositories/form_repository.dart'; import 'package:wyatt_form_bloc/src/presentation/features/form_data/form_data_cubit.dart'; @@ -35,7 +38,8 @@ class InputBuilderTextController, dynamic> + input, TextEditingController textEditingController, FormInputMetadata? metadata, ) builder; @@ -57,15 +61,15 @@ class InputBuilderTextController( builder: (context, state) { - final cubit = context.read(); - final inputValid = state.form.validatorOf(field).valid; - final metadata = state.form.metadataOf(field); + final cubit = context.watch(); + final input = state.form.inputOf(field); + final metadata = input.metadata as FormInputMetadata?; return builder.call( context, cubit, state, field, - inputValid, + input, _controller, metadata, );