An open API service indexing awesome lists of open source software.

https://github.com/acmesoftwarellc/uniform

A form library for Flutter that handles form validation and state management gracefully, with unified form representation.
https://github.com/acmesoftwarellc/uniform

dart dartlang flutter form form-validation

Last synced: 8 months ago
JSON representation

A form library for Flutter that handles form validation and state management gracefully, with unified form representation.

Awesome Lists containing this project

README

          








BSD-3 License
Website
Connect with Acme Software on Linkedin
Twitter Follow
Facebook
Instagram


A form library for Flutter that handles form validation and state management gracefully,


with unified form representation.



Uniform handles the repetitive and annoying stuffโ€”keeping track of values/errors/visited fields, orchestrating validation, and handling submission.

## Features

- ๐Ÿชถ Lightweight & extensive.
- ๐ŸŽฎ Unified form representation using controllers.
- ๐Ÿ”„ Easy and customizable form validation API.
- ๐Ÿ”ง Built-in support for form submission and state management.
- ๐Ÿ› ๏ธ Builders for quickly creating form fields.
- ๐Ÿš€ Compatible with any state management solution or vanilla Flutter States.
- ๐Ÿ”’ Supports for global and local validators.

## Getting started

See the [Installing](https://pub.dev/packages/uniform/install) section.
No extra configurations needed.

## Usage

Note: Detailed Usage documentation is coming soon.
For now, please refer to the [example](https://github.com/AcmeSoftwareLLC/uniform/tree/main/example) for more details.

```dart
final formController = FormController(
validators: {const InputFieldValidator.required()},
);

TextFieldController.create(formController, tag: 'email')
..setValidators({const EmailInputFieldValidator()});

FieldController.create(formController, tag: 'remember_me', autoValidate: true)
..setInitialValue(false)
..setValidators({const PasswordInputFieldValidator()});

InputForm(
controller: formController,
child: Column(
children: [
TextInputFieldBuilder(
tag: 'email',
builder: (_, controller, textController) {
return TextFormField(
controller: textController,
decoration: InputDecoration(
hintText: 'Email Address',
errorText: controller.error.message,
),
enabled: !controller.isSubmitted,
onChanged: controller.onChanged,
);
},
),
const SizedBox(height: 16),
InputFieldBuilder(
tag: 'remember_me',
builder: (context, controller, _) {
return CheckboxListTile(
title: const Text('Remember Me'),
value: controller.value,
controlAffinity: ListTileControlAffinity.leading,
enabled: !controller.isSubmitted,
onChanged: controller.onChanged,
);
},
),
const SizedBox(height: 40),
FilledButton(
onPressed: () {
if(formController.validate()){
print('Form Submitted!');
}
},
child: const Text('Submit'),
),
],
),
),
```