Compare commits
	
		
			No commits in common. "08383ec03bcb7b7458c6cc368fe72edc283e6eb9" and "f05f2230e9ea15df2598a3df17b9dfd68a256c07" have entirely different histories.
		
	
	
		
			08383ec03b
			...
			f05f2230e9
		
	
		
@ -39,7 +39,7 @@ class _NameInput extends StatelessWidget {
 | 
				
			|||||||
    return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
 | 
					    return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
 | 
				
			||||||
      field: formFieldName,
 | 
					      field: formFieldName,
 | 
				
			||||||
      builder:
 | 
					      builder:
 | 
				
			||||||
          (context, cubit, state, field, input, controller, metadata) {
 | 
					          (context, cubit, state, field, inputValid, controller, metadata) {
 | 
				
			||||||
        final meta = state.form.metadataOf<Metadata>(field).extra;
 | 
					        final meta = state.form.metadataOf<Metadata>(field).extra;
 | 
				
			||||||
        final color = computeColor(meta);
 | 
					        final color = computeColor(meta);
 | 
				
			||||||
        return Row(
 | 
					        return Row(
 | 
				
			||||||
@ -65,7 +65,7 @@ class _NameInput extends StatelessWidget {
 | 
				
			|||||||
                decoration: InputDecoration(
 | 
					                decoration: InputDecoration(
 | 
				
			||||||
                  labelText: 'name',
 | 
					                  labelText: 'name',
 | 
				
			||||||
                  helperText: '',
 | 
					                  helperText: '',
 | 
				
			||||||
                  errorText: input.validator.invalid ? 'invalid name' : null,
 | 
					                  errorText: !inputValid ? 'invalid name' : null,
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
@ -81,7 +81,7 @@ class _PhoneInput extends StatelessWidget {
 | 
				
			|||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return InputBuilderMetadata<SimpleCustomFormCubit, Metadata>(
 | 
					    return InputBuilderMetadata<SimpleCustomFormCubit, Metadata>(
 | 
				
			||||||
      field: formFieldPhone,
 | 
					      field: formFieldPhone,
 | 
				
			||||||
      builder: (context, cubit, state, field, input, metadata) {
 | 
					      builder: (context, cubit, state, field, inputValid, metadata) {
 | 
				
			||||||
        final meta = state.form.metadataOf<Metadata>(field).extra;
 | 
					        final meta = state.form.metadataOf<Metadata>(field).extra;
 | 
				
			||||||
        final color = computeColor(meta);
 | 
					        final color = computeColor(meta);
 | 
				
			||||||
        return Row(
 | 
					        return Row(
 | 
				
			||||||
@ -106,7 +106,7 @@ class _PhoneInput extends StatelessWidget {
 | 
				
			|||||||
                decoration: InputDecoration(
 | 
					                decoration: InputDecoration(
 | 
				
			||||||
                  labelText: 'phone',
 | 
					                  labelText: 'phone',
 | 
				
			||||||
                  helperText: '',
 | 
					                  helperText: '',
 | 
				
			||||||
                  errorText: input.validator.invalid ? 'invalid phone' : null,
 | 
					                  errorText: !inputValid ? 'invalid phone' : null,
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
@ -122,13 +122,13 @@ class _EmailInput extends StatelessWidget {
 | 
				
			|||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return InputBuilder<SimpleCustomFormCubit>(
 | 
					    return InputBuilder<SimpleCustomFormCubit>(
 | 
				
			||||||
      field: formFieldEmail,
 | 
					      field: formFieldEmail,
 | 
				
			||||||
      builder: (context, cubit, state, field, input) => TextField(
 | 
					      builder: (context, cubit, state, field, inputValid) => TextField(
 | 
				
			||||||
        onChanged: (value) => cubit.dataChanged(field, Email.dirty(value)),
 | 
					        onChanged: (value) => cubit.dataChanged(field, Email.dirty(value)),
 | 
				
			||||||
        keyboardType: TextInputType.emailAddress,
 | 
					        keyboardType: TextInputType.emailAddress,
 | 
				
			||||||
        decoration: InputDecoration(
 | 
					        decoration: InputDecoration(
 | 
				
			||||||
          labelText: 'email',
 | 
					          labelText: 'email',
 | 
				
			||||||
          helperText: '',
 | 
					          helperText: '',
 | 
				
			||||||
          errorText: input.validator.invalid ? 'invalid email' : null,
 | 
					          errorText: !inputValid ? 'invalid email' : null,
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,8 @@ class _NameInput extends StatelessWidget {
 | 
				
			|||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
 | 
					    return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
 | 
				
			||||||
      field: formFieldName,
 | 
					      field: formFieldName,
 | 
				
			||||||
      builder: (context, cubit, state, field, input, controller, metadata) {
 | 
					      builder:
 | 
				
			||||||
 | 
					          (context, cubit, state, field, inputValid, controller, metadata) {
 | 
				
			||||||
        return TextField(
 | 
					        return TextField(
 | 
				
			||||||
          controller: controller,
 | 
					          controller: controller,
 | 
				
			||||||
          onChanged: (value) => cubit.dataChanged(field, Name.dirty(value)),
 | 
					          onChanged: (value) => cubit.dataChanged(field, Name.dirty(value)),
 | 
				
			||||||
@ -33,7 +34,7 @@ class _NameInput extends StatelessWidget {
 | 
				
			|||||||
          decoration: InputDecoration(
 | 
					          decoration: InputDecoration(
 | 
				
			||||||
            labelText: 'name',
 | 
					            labelText: 'name',
 | 
				
			||||||
            helperText: '',
 | 
					            helperText: '',
 | 
				
			||||||
            errorText: input.validator.invalid ? 'invalid name' : null,
 | 
					            errorText: !inputValid ? 'invalid name' : null,
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
				
			|||||||
@ -28,16 +28,16 @@ class InputBuilder<Cubit extends FormDataCubit> extends StatelessWidget {
 | 
				
			|||||||
    Cubit cubit,
 | 
					    Cubit cubit,
 | 
				
			||||||
    FormDataState state,
 | 
					    FormDataState state,
 | 
				
			||||||
    String field,
 | 
					    String field,
 | 
				
			||||||
    FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>
 | 
					    bool inputValid,
 | 
				
			||||||
        input,
 | 
					 | 
				
			||||||
  ) builder;
 | 
					  ) builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) => BlocBuilder<Cubit, FormDataState>(
 | 
					  Widget build(BuildContext context) =>
 | 
				
			||||||
 | 
					      BlocBuilder<Cubit, FormDataState>(
 | 
				
			||||||
        builder: (context, state) {
 | 
					        builder: (context, state) {
 | 
				
			||||||
          final cubit = context.watch<Cubit>();
 | 
					          final cubit = context.watch<Cubit>();
 | 
				
			||||||
          final input = state.form.inputOf(field);
 | 
					          final inputValid = state.form.validatorOf(field).valid;
 | 
				
			||||||
          return builder.call(context, cubit, state, field, input);
 | 
					          return builder.call(context, cubit, state, field, inputValid);
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,10 +16,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:flutter_bloc/flutter_bloc.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/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';
 | 
					import 'package:wyatt_form_bloc/src/presentation/presentation.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class InputBuilderMetadata<Cubit extends FormDataCubit, Extra>
 | 
					class InputBuilderMetadata<Cubit extends FormDataCubit, Extra>
 | 
				
			||||||
@ -37,23 +34,22 @@ class InputBuilderMetadata<Cubit extends FormDataCubit, Extra>
 | 
				
			|||||||
    Cubit cubit,
 | 
					    Cubit cubit,
 | 
				
			||||||
    FormDataState state,
 | 
					    FormDataState state,
 | 
				
			||||||
    String field,
 | 
					    String field,
 | 
				
			||||||
    FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>
 | 
					    bool inputValid,
 | 
				
			||||||
        input,
 | 
					 | 
				
			||||||
    FormInputMetadata<Extra>? metadata,
 | 
					    FormInputMetadata<Extra>? metadata,
 | 
				
			||||||
  ) builder;
 | 
					  ) builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) => BlocBuilder<Cubit, FormDataState>(
 | 
					  Widget build(BuildContext context) => BlocBuilder<Cubit, FormDataState>(
 | 
				
			||||||
        builder: (context, state) {
 | 
					        builder: (context, state) {
 | 
				
			||||||
          final cubit = context.watch<Cubit>();
 | 
					          final cubit = context.read<Cubit>();
 | 
				
			||||||
          final input = state.form.inputOf(field);
 | 
					          final inputValid = state.form.validatorOf(field).valid;
 | 
				
			||||||
          final metadata = input.metadata as FormInputMetadata<Extra>?;
 | 
					          final metadata = state.form.metadataOf<Extra>(field);
 | 
				
			||||||
          return builder.call(
 | 
					          return builder.call(
 | 
				
			||||||
            context,
 | 
					            context,
 | 
				
			||||||
            cubit,
 | 
					            cubit,
 | 
				
			||||||
            state,
 | 
					            state,
 | 
				
			||||||
            field,
 | 
					            field,
 | 
				
			||||||
            input,
 | 
					            inputValid,
 | 
				
			||||||
            metadata,
 | 
					            metadata,
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
				
			|||||||
@ -16,10 +16,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:flutter_bloc/flutter_bloc.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/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/domain/repositories/form_repository.dart';
 | 
				
			||||||
import 'package:wyatt_form_bloc/src/presentation/features/form_data/form_data_cubit.dart';
 | 
					import 'package:wyatt_form_bloc/src/presentation/features/form_data/form_data_cubit.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -38,8 +35,7 @@ class InputBuilderTextController<Cubit extends FormDataCubit, S extends String?,
 | 
				
			|||||||
    Cubit cubit,
 | 
					    Cubit cubit,
 | 
				
			||||||
    FormDataState state,
 | 
					    FormDataState state,
 | 
				
			||||||
    String field,
 | 
					    String field,
 | 
				
			||||||
    FormInput<dynamic, FormInputValidator<dynamic, ValidationError>, dynamic>
 | 
					    bool inputValid,
 | 
				
			||||||
        input,
 | 
					 | 
				
			||||||
    TextEditingController textEditingController,
 | 
					    TextEditingController textEditingController,
 | 
				
			||||||
    FormInputMetadata<Extra>? metadata,
 | 
					    FormInputMetadata<Extra>? metadata,
 | 
				
			||||||
  ) builder;
 | 
					  ) builder;
 | 
				
			||||||
@ -61,15 +57,15 @@ class InputBuilderTextController<Cubit extends FormDataCubit, S extends String?,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return BlocBuilder<Cubit, FormDataState>(
 | 
					    return BlocBuilder<Cubit, FormDataState>(
 | 
				
			||||||
      builder: (context, state) {
 | 
					      builder: (context, state) {
 | 
				
			||||||
        final cubit = context.watch<Cubit>();
 | 
					        final cubit = context.read<Cubit>();
 | 
				
			||||||
        final input = state.form.inputOf(field);
 | 
					        final inputValid = state.form.validatorOf(field).valid;
 | 
				
			||||||
        final metadata = input.metadata as FormInputMetadata<Extra>?;
 | 
					        final metadata = state.form.metadataOf<Extra>(field);
 | 
				
			||||||
        return builder.call(
 | 
					        return builder.call(
 | 
				
			||||||
          context,
 | 
					          context,
 | 
				
			||||||
          cubit,
 | 
					          cubit,
 | 
				
			||||||
          state,
 | 
					          state,
 | 
				
			||||||
          field,
 | 
					          field,
 | 
				
			||||||
          input,
 | 
					          inputValid,
 | 
				
			||||||
          _controller,
 | 
					          _controller,
 | 
				
			||||||
          metadata,
 | 
					          metadata,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
				
			|||||||
@ -27,6 +27,7 @@ class SubmitBuilder<Cubit extends FormDataCubit> extends StatelessWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) => BlocBuilder<Cubit, FormDataState>(
 | 
					  Widget build(BuildContext context) => BlocBuilder<Cubit, FormDataState>(
 | 
				
			||||||
 | 
					        buildWhen: (previous, current) => previous.status != current.status,
 | 
				
			||||||
        builder: (context, state) => builder.call(
 | 
					        builder: (context, state) => builder.call(
 | 
				
			||||||
          context,
 | 
					          context,
 | 
				
			||||||
          context.read<Cubit>(),
 | 
					          context.read<Cubit>(),
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user