Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor!: decouple purity, validity, and submission status #48

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,41 +38,40 @@ class NameInput extends FormzInput<String, NameInputError> {
## Interact with a FormzInput

```dart
final name = NameInput.pure();
const name = NameInput.pure();
print(name.value); // ''
print(name.valid); // false
print(name.status); // FormzInputStatus.pure
print(name.isValid); // false
print(name.error); // NameInputError.empty
print(name.displayError); // null

final joe = NameInput.dirty(value: 'joe');
const joe = NameInput.dirty(value: 'joe');
print(joe.value); // 'joe'
print(joe.valid); // true
print(joe.status); // FormzInputStatus.valid
print(joe.isValid); // true
print(joe.error); // null
print(joe.toString()); // NameInput('joe', true);
print(name.displayError); // null
```

## Validate Multiple FormzInput Items

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

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

final invalidInputs = <FormzInput>[
NameInput.dirty(value: ''),
NameInput.dirty(value: ''),
NameInput.dirty(value: ''),
const invalidInputs = <FormzInput>[
NameInput.dirty(),
NameInput.dirty(),
NameInput.dirty(),
];

print(Formz.validate(invalidInputs)); // FormzStatus.invalid
print(Formz.validate(invalidInputs)); // false
```

## Automatic `FormzStatus` Computation
## Automatic Validation

```dart
class LoginForm with FormzMixin {
Expand All @@ -88,6 +87,7 @@ class LoginForm with FormzMixin {
List<FormzInput> get inputs => [username, password];
}

final form = LoginForm();
print(form.status); // FormzStatus.pure
void main() {
print(LoginForm().isValid); // false
}
```
82 changes: 1 addition & 81 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -1,81 +1 @@
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
exclude:
- test/.test_coverage.dart

linter:
rules:
- public_member_api_docs
- annotate_overrides
- avoid_empty_else
- avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_null_checks_in_equality_operators
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_types_as_parameter_names
- avoid_unused_constructor_parameters
- await_only_futures
- camel_case_types
- cancel_subscriptions
- cascade_invocations
- comment_references
- constant_identifier_names
- control_flow_in_finally
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- hash_and_equals
- implementation_imports
- invariant_booleans
- iterable_contains_unrelated_type
- library_names
- library_prefixes
- list_remove_unrelated_type
- lines_longer_than_80_chars
- no_adjacent_strings_in_list
- no_duplicate_case_values
- non_constant_identifier_names
- null_closures
- omit_local_variable_types
- only_throw_errors
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
- prefer_adjacent_string_concatenation
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_contains
- prefer_equal_for_default_values
- prefer_final_fields
- prefer_initializing_formals
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_single_quotes
- prefer_typing_uninitialized_variables
- recursive_getters
- slash_for_doc_comments
- sort_constructors_first
- test_types_in_equals
- throw_in_finally
- type_init_formals
- unawaited_futures
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_statements
- unnecessary_this
- unrelated_type_equality_checks
- use_rethrow_when_possible
- valid_regexps
include: package:very_good_analysis/analysis_options.2.4.0.yaml
21 changes: 11 additions & 10 deletions example/main.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: avoid_print

import 'package:formz/formz.dart';

// Define input validation errors
Expand All @@ -21,30 +23,29 @@ class NameInput extends FormzInput<String, NameInputError> {
void main() {
const name = NameInput.pure();
print(name.value); // ''
print(name.valid); // false
print(name.status); // FormzInputStatus.pure
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.valid); // true
print(joe.status); // FormzInputStatus.valid
print(joe.isValid); // true
print(joe.error); // null
print(joe.toString()); // NameInput('joe', true);
print(name.displayError); // null

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

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

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

print(Formz.validate(invalidInputs)); // FormzStatus.invalid
print(Formz.validate(invalidInputs)); // false
}
Loading