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() {
return [
FormInput(formFieldName, const Name.pure(),
FormInput(formFieldName, const Name.pure('Test'),
metadata: const FormInputMetadata<Metadata>(extra: blue)),
FormInput(formFieldEmail, const Email.pure(),
metadata: const FormInputMetadata<Metadata>(extra: blue)),
FormInput(formFieldList,
const ListOption<String>.pure(defaultValue: 'c3')),
FormInput(
formFieldList, const ListOption<String>.pure(choices: ['c1', 'c2', 'c3'],defaultValue: 'c3')),
FormInput(formFieldRadio, const TextString.pure()),
FormInput(formFieldPro, const Boolean.pure(),
metadata: const FormInputMetadata<Metadata>(name: 'business')),
@ -54,20 +54,35 @@ class App extends StatelessWidget {
}
static WyattForm getNormalFormData() {
return WyattFormImpl(getNormalEntries());
return WyattFormImpl(getNormalEntries(), name: formSignUp);
}
static WyattForm getProFormData() {
return WyattFormImpl(getBusinessEntries());
return WyattFormImpl(getBusinessEntries(), name: formSignUp);
}
@override
Widget build(BuildContext context) {
SimpleCustomFormCubit formCubit = SimpleCustomFormCubit(getNormalFormData());
FormRepository formRepository = FormRepositoryImpl()
..registerForm(getNormalFormData());
return BlocProvider<SimpleCustomFormCubit>(
create: (context) => formCubit,
child: const WidgetTree(),
// FormRepository formRepository = FormRepositoryImpl()
// ..registerForm(WyattFormImpl([
// FormInput(formFieldName, const Name.pure('Test'),
// metadata: const FormInputMetadata<Metadata>(extra: blue)),
// ], name: formSignUp));
SimpleCustomFormCubit formCubit = SimpleCustomFormCubit(
formRepository,
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
// along with this program. If not, see <https://www.gnu.org/licenses/>.
const String formSignUp = 'signUp';
const String formFieldName = 'name';
const String formFieldPhone = 'phone';
const String formFieldEmail = 'email';

View File

@ -36,9 +36,10 @@ Color computeColor(Metadata? meta) {
class _NameInput extends StatelessWidget {
@override
Widget build(BuildContext context) {
return InputBuilderMetadata<SimpleCustomFormCubit, Metadata>(
return InputBuilderTextController<SimpleCustomFormCubit, String?, Metadata>(
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 color = computeColor(meta);
return Row(
@ -57,6 +58,7 @@ class _NameInput extends StatelessWidget {
SizedBox(
width: MediaQuery.of(context).size.width - 45,
child: TextField(
controller: controller,
onChanged: (value) =>
cubit.dataChanged(field, Name.dirty(value)),
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';
class SimpleCustomFormCubit extends FormDataCubitImpl {
SimpleCustomFormCubit(super.form) : super();
SimpleCustomFormCubit(super._formRepository, super._formName) : super();
@override
Future<void> submit() {