refactor(form): refactor simple example

This commit is contained in:
Hugo Pointcheval 2022-11-10 01:06:25 -05:00
parent 7a056ac38e
commit 68a582c3ad
Signed by: hugo
GPG Key ID: A9E8E9615379254F
5 changed files with 88 additions and 12 deletions

View File

@ -30,12 +30,12 @@ class App extends StatelessWidget {
static List<FormInput> getNormalEntries() { static List<FormInput> getNormalEntries() {
return [ return [
FormInput(formFieldName, const Name.pure(), FormInput(formFieldName, const Name.pure('Test'),
metadata: const FormInputMetadata<Metadata>(extra: blue)), metadata: const FormInputMetadata<Metadata>(extra: blue)),
FormInput(formFieldEmail, const Email.pure(), FormInput(formFieldEmail, const Email.pure(),
metadata: const FormInputMetadata<Metadata>(extra: blue)), metadata: const FormInputMetadata<Metadata>(extra: blue)),
FormInput(formFieldList, FormInput(
const ListOption<String>.pure(defaultValue: 'c3')), formFieldList, const ListOption<String>.pure(choices: ['c1', 'c2', 'c3'],defaultValue: 'c3')),
FormInput(formFieldRadio, const TextString.pure()), FormInput(formFieldRadio, const TextString.pure()),
FormInput(formFieldPro, const Boolean.pure(), FormInput(formFieldPro, const Boolean.pure(),
metadata: const FormInputMetadata<Metadata>(name: 'business')), metadata: const FormInputMetadata<Metadata>(name: 'business')),
@ -54,20 +54,35 @@ class App extends StatelessWidget {
} }
static WyattForm getNormalFormData() { static WyattForm getNormalFormData() {
return WyattFormImpl(getNormalEntries()); return WyattFormImpl(getNormalEntries(), name: formSignUp);
} }
static WyattForm getProFormData() { static WyattForm getProFormData() {
return WyattFormImpl(getBusinessEntries()); return WyattFormImpl(getBusinessEntries(), name: formSignUp);
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SimpleCustomFormCubit formCubit = SimpleCustomFormCubit(getNormalFormData()); FormRepository formRepository = FormRepositoryImpl()
..registerForm(getNormalFormData());
// FormRepository formRepository = FormRepositoryImpl()
// ..registerForm(WyattFormImpl([
// FormInput(formFieldName, const Name.pure('Test'),
// metadata: const FormInputMetadata<Metadata>(extra: blue)),
// ], name: formSignUp));
return BlocProvider<SimpleCustomFormCubit>( SimpleCustomFormCubit formCubit = SimpleCustomFormCubit(
create: (context) => formCubit, formRepository,
child: const WidgetTree(), formSignUp,
);
return RepositoryProvider<FormRepository>.value(
value: formRepository,
child: BlocProvider<SimpleCustomFormCubit>(
create: (context) => formCubit,
child: const WidgetTree(),
),
); );
} }
} }

View File

@ -14,6 +14,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
const String formSignUp = 'signUp';
const String formFieldName = 'name'; const String formFieldName = 'name';
const String formFieldPhone = 'phone'; const String formFieldPhone = 'phone';
const String formFieldEmail = 'email'; const String formFieldEmail = 'email';

View File

@ -36,9 +36,10 @@ Color computeColor(Metadata? meta) {
class _NameInput extends StatelessWidget { class _NameInput extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InputBuilderMetadata<SimpleCustomFormCubit, Metadata>( return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
field: formFieldName, field: formFieldName,
builder: (context, cubit, state, field, inputValid, metadata) { builder:
(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(
@ -57,6 +58,7 @@ class _NameInput extends StatelessWidget {
SizedBox( SizedBox(
width: MediaQuery.of(context).size.width - 45, width: MediaQuery.of(context).size.width - 45,
child: TextField( child: TextField(
controller: controller,
onChanged: (value) => onChanged: (value) =>
cubit.dataChanged(field, Name.dirty(value)), cubit.dataChanged(field, Name.dirty(value)),
keyboardType: TextInputType.name, keyboardType: TextInputType.name,

View File

@ -0,0 +1,57 @@
// Copyright (C) 2022 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'package:flutter/material.dart';
import 'package:form_bloc_example/app/metadata.dart';
import 'package:form_bloc_example/constants.dart';
import 'package:form_bloc_example/simple_custom_form_cubit/simple_custom_form_cubit.dart';
import 'package:wyatt_form_bloc/wyatt_form_bloc.dart';
class _NameInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
field: formFieldName,
builder:
(context, cubit, state, field, inputValid, controller, metadata) {
return TextField(
controller: controller,
onChanged: (value) => cubit.dataChanged(field, Name.dirty(value)),
keyboardType: TextInputType.name,
decoration: InputDecoration(
labelText: 'name',
helperText: '',
errorText: !inputValid ? 'invalid name' : null,
),
);
},
);
}
}
class SimpleSignUpForm extends StatelessWidget {
const SimpleSignUpForm({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
_NameInput(),
const SizedBox(height: 8),
],
);
}
}

View File

@ -19,7 +19,7 @@ import 'dart:developer';
import 'package:wyatt_form_bloc/wyatt_form_bloc.dart'; import 'package:wyatt_form_bloc/wyatt_form_bloc.dart';
class SimpleCustomFormCubit extends FormDataCubitImpl { class SimpleCustomFormCubit extends FormDataCubitImpl {
SimpleCustomFormCubit(super.form) : super(); SimpleCustomFormCubit(super._formRepository, super._formName) : super();
@override @override
Future<void> submit() { Future<void> submit() {