formality 0.0.1 copy "formality: ^0.0.1" to clipboard
formality: ^0.0.1 copied to clipboard

A simple Flutter form validation library.

Formality #

A simple form validation library for Flutter.

Example #

class UserFormModel {
  final String firstName;
  final String lastName;

  UserFormModel({
    required this.firstName,
    required this.lastName,
  });
}

class MyPage extends StatelessWidget {
  @override
  build(context) {
    return FormBuilder(
      initialFormData: UserFormModel(
        firstName: 'John',
        lastName: 'Smith',
      ),
      builder: (context, formData, controller) {
        final UserFormModel(:firstName, :lastName) = formData;

        return Column(
          children: [
            Validation(
              valid: firstName.isNotEmpty,
              child: TextFormField(
                initialValue: firstName,
                decoration: const InputDecoration(labelText: 'First name'),
                onChanged: (value) => controller.setForm(
                  formData.copyWith(firstName: value),
                ),
              ),
            ),
            Validation(
              valid: lastName.isNotEmpty,
              child: TextFormField(
                initialValue: lastName,
                decoration: const InputDecoration(labelText: 'Last name'),
                onChanged: (value) => controller.setForm(
                  formData.copyWith(lastName: value),
                },
              ),
            ),
            ElevatedButton(
              child: Text('Submit'),
              onPress: () {
                if (controller.validate()) {
                  // Submit form
                }
              }
            )
          ],
        );
      }
    );
  }
}

All validation widgets animate errors as shown below:

[Basic demo gif].

Field animations can be customized using the Validation.childAnimationBuilder and Validation.errorAnimationBuilder builders.

Required fields #

Fields can be labeled as optional using the Validation.required field.

class UserFormModel {
  final String name;
  final String description;

  UserFormModel({
    required this.name,
    required this.description,
  });
}

class MyPage extends StatelessWidget {
  @override
  build(context) {
    return FormBuilder(
      initialFormData: UserFormModel(
        name: 'John Smith',
        description: '',
      ),
      builder: (context, formData, controller) {
        final UserFormModel(:name, :description) = formData;

        return Column(
          children: [
            Validation(
              valid: name.isNotEmpty,
              required: false,
              child: TextFormField(
                initialValue: name,
                decoration: const InputDecoration(labelText: 'Name'),
                onChanged: (value) => controller.setForm(
                  formData.copyWith(name: value),
                ),
              ),
            ),
            Validation(
              valid: lastName.isNotEmpty,
              // Mark a field as optional to allow submission with failing validation.
              required: false,
              child: TextFormField(
                initialValue: lastName,
                decoration: const InputDecoration(labelText: 'Optional description'),
                onChanged: (value) => controller.setForm(
                  formData.copyWith(description: value),
                },
              ),
            ),
            ElevatedButton(
              child: Text('Submit'),
              onPress: () {
                if (controller.validate()) {
                }
              }
            )
          ],
        );
      }
    );
  }
}
0
likes
0
points
18
downloads

Publisher

unverified uploader

Weekly Downloads

A simple Flutter form validation library.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, flutter_animate

More

Packages that depend on formality