• Stars
    star
    378
  • Rank 113,272 (Top 3 %)
  • Language
    Dart
  • License
    MIT License
  • Created over 4 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A unified form representation in Dart used at Very Good Ventures ๐Ÿฆ„

๐Ÿ“ Formz

Very Good Ventures Very Good Ventures

Developed with ๐Ÿ’™ by Very Good Ventures ๐Ÿฆ„

ci coverage pub package License: MIT style: very good analysis


A unified form representation in Dart. Formz aims to simplify form representation and validation in a generic way.

Create a FormzInput

import 'package:formz/formz.dart';

// Define input validation errors
enum NameInputError { empty }

// Extend FormzInput and provide the input type and error type.
class NameInput extends FormzInput<String, NameInputError> {
  // Call super.pure to represent an unmodified form input.
  const NameInput.pure() : super.pure('');

  // Call super.dirty to represent a modified form input.
  const NameInput.dirty({String value = ''}) : super.dirty(value);

  // Override validator to handle validating a given input value.
  @override
  NameInputError? validator(String value) {
    return value.isEmpty ? NameInputError.empty : null;
  }
}

Interact with a FormzInput

const name = NameInput.pure();
print(name.value); // ''
print(name.isValid); // false
print(name.error); // NameInputError.empty
print(name.displayError); // null

const joe = NameInput.dirty(value: 'joe');
print(joe.value); // 'joe'
print(joe.isValid); // true
print(joe.error); // null
print(name.displayError); // null

Validate Multiple FormzInput Items

const validInputs = <FormzInput>[
  NameInput.dirty(value: 'jan'),
  NameInput.dirty(value: 'jen'),
  NameInput.dirty(value: 'joe'),
];

print(Formz.validate(validInputs)); // true

const invalidInputs = <FormzInput>[
  NameInput.dirty(),
  NameInput.dirty(),
  NameInput.dirty(),
];

print(Formz.validate(invalidInputs)); // false

Automatic Validation

class LoginForm with FormzMixin {
  LoginForm({
    this.username = const Username.pure(),
    this.password = const Password.pure(),
  });

  final Username username;
  final Password password;

  @override
  List<FormzInput> get inputs => [username, password];
}

void main() {
  print(LoginForm().isValid); // false
}

Caching validation results

For cases where the validator method has an expensive implementation, consider using the FormzInputErrorCacheMixin mixin to cache the error result and improve performance.

import 'package:formz/formz.dart';

enum EmailValidationError { invalid }

class Email extends FormzInput<String, EmailValidationError>
    with FormzInputErrorCacheMixin {
  Email.pure([super.value = '']) : super.pure();

  Email.dirty([super.value = '']) : super.dirty();

  static final _emailRegExp = RegExp(
    r'^[a-zA-Z\d.!#$%&โ€™*+/=?^_`{|}~-]+@[a-zA-Z\d-]+(?:\.[a-zA-Z\d-]+)*$',
  );

  @override
  EmailValidationError? validator(String value) {
    return _emailRegExp.hasMatch(value) ? null : EmailValidationError.invalid;
  }
}

More Repositories

1

very_good_cli

A Very Good Command-Line Interface for Dart created by Very Good Ventures ๐Ÿฆ„
Dart
2,149
star
2

dart_frog

A fast, minimalistic backend framework for Dart ๐ŸŽฏ
Dart
1,830
star
3

very_good_analysis

Lint rules for Dart and Flutter used internally at Very Good Ventures ๐Ÿฆ„
Dart
357
star
4

very_good_workflows

Reusable GitHub workflows used at Very Good Ventures ๐Ÿฆ„
CSS
292
star
5

very_good_infinite_list

A Very Good Infinite List Widget created by Very Good Ventures. Great for activity feeds, news feeds, and more. ๐Ÿฆ„
Dart
171
star
6

very_good_coverage

GitHub Action which helps enforce code coverage threshold using lcov created by Very Good Ventures ๐Ÿฆ„
JavaScript
159
star
7

very_good_core

A Very Good Flutter Starter Project created by the Very Good Ventures Team ๐Ÿฆ„
C++
131
star
8

mockingjay

A package that makes it easy to mock, test, and verify navigation in Flutter. Created by Very Good Ventures ๐Ÿฆ„
Dart
112
star
9

awesome_dart_frog

An awesome repo with Dart Frog articles, tutorials, plugins, and more! Created by Very Good Ventures.
105
star
10

very_good_flame_game

A Very Good Flutter Starter Flame Game created by the Very Good Ventures Team ๐Ÿฆ„
Dart
85
star
11

very_good_performance

Utility on top of the Flutter Driver API that facilitates measuring the performance of your app in an automated way created by Very Good Ventures ๐Ÿฆ„
C++
81
star
12

very_good_ranch

A very good Flame game built by Very Good Ventures ๐Ÿฆ„
Dart
75
star
13

r13n

Regionalization support for Flutter. Built by Very Good Ventures ๐Ÿฆ„
Dart
72
star
14

flutter_web_preloader

A brick that creates a smart web entrypoint for Flutter and preloads any type of asset before starting an app.
JavaScript
71
star
15

very_good_wear_app

A Very Good Flutter Wear OS App Starter Project created by the Very Good Ventures Team ๐Ÿฆ„
Dart
65
star
16

flame_behaviors

An implementation of the behavioral composition pattern for Flame. Built by Very Good Ventures ๐Ÿฆ„
Dart
64
star
17

very_good_templates

Collection of open-source templates created and maintained by Very Good Ventures.
Dart
61
star
18

pub_updater

A Dart package which supports checking if a current package is up-to-date.
Dart
55
star
19

cli_completion

Completion functionality for Dart Command-Line Interfaces built using CommandRunner. Built by Very Good Ventures. ๐Ÿฆ„
Dart
49
star
20

very_good_flutter_package

A Very Good Flutter Package Template created by the Very Good Ventures Team ๐Ÿฆ„
Dart
42
star
21

very_good_dart_cli

A Very Good Dart CLI Template created by the Very Good Ventures Team ๐Ÿฆ„
Dart
33
star
22

very_good_flutter_plugin

A Very Good Flutter Federated Plugin created by the Very Good Ventures Team ๐Ÿฆ„
Dart
29
star
23

very_good_test_runner

A test runner for Flutter and Dart created by Very Good Ventures ๐Ÿฆ„
Dart
18
star
24

very_good_hub

An end-to-end example of Flutter+Dart Frog application, using authentication
Dart
15
star
25

very_good_docs_site

A Very Good Documentation Site created by the Very Good Ventures Team ๐Ÿฆ„
JavaScript
15
star
26

very_good_dart_package

A Very Good Dart Package Template created by the Very Good Ventures Team ๐Ÿฆ„
Dart
14
star
27

flame_steering_behaviors

Flame behaviors used to organically manage the movement of an entity. Built by Very Good Ventures ๐Ÿฆ„
Dart
10
star
28

.github

7
star
29

changelogs

Changelogs for open source tools maintained by Very Good Ventures.
TypeScript
5
star
30

very_good_dictionaries

Custom cspell dictionaries used at Very Good Ventures ๐Ÿฆ„
4
star
31

flutter_and_friends_tic_tac_toe

Flutter and Friend workshop about Tic Tac Toe
Dart
1
star