Basic Usage
This page will walk you through the basics of creating and using schemas with Acanthis. We will cover the following topics:
- Creating a schema
- Parsing data
For the complete Acanthis schema API, please refer to Defining schemas.
Defining a schema
A schema is a blueprint for validating data, before we do anything else, we need to define one. For this example, we will create a schema for a user object.
import 'package:acanthis/acanthis.dart';
final userSchema = object({
'name': string().min(3),
'age': number().positive(),
'email': string().email(),
});
Parsing data
Once we have defined a schema, we can use it to parse data.
parse()
T parse(T value)
Parses the value and returns a new instance of parsed value of type T
.
userSchema.parse({
'name': 'Francesco',
'age': 32,
'email': 'test@example.com',
});
// => { name: Francesco, age: 32, email: test@example.com }
If the value is invalid, a ValidationError
will be thrown.
userSchema.parse({
'name': 'Francesco',
'age': -32,
'email': 'test@example.com',
});
// => ValidationError: {'age': 'Value must be positive'}
INFO
If you use any of the AsyncCheck
, then you need to use the parseAsync
method instead of parse
.
tryParse()
AcanthisParseResult tryParse(T value)
To avoid throwing exceptions, you can use the tryParse
method. This method will return an AcanthisParseResult
object that contains the result of the parsing.
userSchema.tryParse({
'name': 'Francesco',
'age': 32,
'email': 'test@example.com',
});
// => AcanthisParseResult(success: true, value: { name: Francesco, age: 32, email: test@example.com }, errors: {}, metadata: null)
userSchema.parse({
'name': 'Francesco',
'age': -32,
'email': 'test@example.com',
});
// => AcanthisParseResult(success: false, value: null, errors: { age: 'Value must be positive' }, metadata: null)
INFO
If you use any of the AsyncCheck
, then you need to use the tryParseAsync
method instead of tryParse
.
parseAsync()
Future<T> parseAsync(T value)
This method behaves exactly like parse
, but it returns a Future
that resolves to the parsed value.
userSchema.parseAsync({
'name': 'Francesco',
'age': 32,
'email': 'test@example.com',
});
// => Future<{ name: Francesco, age: 32, email: test@example.com }>
tryParseAsync()
Future<AcanthisParseResult> tryParseAsync(T value)
This method behaves exactly like tryParse
, but it returns a Future
that resolves to the AcanthisParseResult
object.
userSchema.tryParseAsync({
'name': 'Francesco',
'age': 32,
'email': 'test@example.com',
});
// => Future<AcanthisParseResult(success: true, value: { name: Francesco, age: 32, email: test@example.com }, errors: {}, metadata: null)>
Now that the basics are covered, you can now jump to the Defining schemas page to learn more about all the validators usable in your schemas.