stow_codecs
A collection of codecs and utilities commonly used with stow packages like stow_plain.
Custom codecs
If you need to write your own codec, it may be easier/quicker to use these
utility classes instead of the base Codec class from dart:convert...
AbstractCodec
An abstract codec whose encode and decode methods need to be overridden.
This requires less boilerplate than extending Codec directly
since you don't need to define the Converter classes separately.
A simple example (identical to IntToStringCodec below):
class MyIntCodec extends AbstractCodec<int, String> {
const MyIntCodec();
@override String encode(int input) => input.toString();
@override int decode(String input) => int.parse(input);
}
DelegateCodec
A codec that delegates encoding and decoding to the functions provided to its constructor.
Compared to AbstractCodec, a DelegateCodec definition can be more concise
and can even be defined inline since you don't need to write a class.
However, since its constructor takes functions, it cannot be made const.
A simple example (identical to IntToStringCodec below except not const):
final myIntCodec = DelegateCodec<int, String>(
encode: (input) => input.toString(),
decode: (encoded) => int.parse(encoded),
);
Ready-made codecs
We also have a few codecs that are ready to use without any extra code...
BoolToStringCodec
Converts between bool and String types,
e.g. true <-> 'true'.
Usage: const BoolToStringCodec().
ColorCodec
Encodes a Color as an ARGB32 integer,
e.g. Color(0xFF123456) <-> 0xFF123456.
Usage: const ColorCodec().
DateTimeCodec
Encodes a DateTime as an ISO 8601 string,
e.g. DateTime.utc(1969, 7, 20, 20, 18, 04) <-> '1969-07-20T20:18:04.000Z'.
Usage: const DateTimeCodec().
EnumCodec
Encodes an enum value as its index,
e.g. Fruits.banana <-> 1.
Usage:
enum Fruits {
apple, banana, cherry;
// Define it directly in the enum...
static const codec = EnumCodec(values);
}
// ...or outside the enum...
final codec = EnumCodec(Fruits.values);
IdentityCodec
Does nothing to its input.
Usage: const IdentityCodec()
IntToStringCodec
Converts between int and String types,
e.g. 123 <-> '123'.
Usage: const IntToStringCodec().
TypedJsonCodec
The same as Dart's built-in JsonCodec but with loosened type constraints.
Typically, you would not use this directly. It is internally used in
stow_plain's PlainStow.json constructor.