snapshot

Creator: coderz1093

Last updated:

Add to Cart

Description:

snapshot

A library that can be used to implement data classes
A Snapshot simplifies accessing and converting properties in a JSON-like
object, for example a JSON object returned from a REST-api service.
Using Snapshot objects directly #
void main() {
var v = Snapshot.fromJson({
'firstname': 'Jane',
'lastname': 'Doe',
'profileUrl': 'https://my.avatar.com/jane-doe.png',
'createdAt': 1593698272650,
'dateOfBirth': '2001-01-02',
'address': {
'addressLine1': 'Mainstreet 1',
'city': 'London',
}
});

// getting a property as core data type
var firstname = v.child('firstname').as<String>();
print('firstname = $firstname');

// getting a property and converting it to an Uri
var profileUrl = v.child('profileUrl').as<Uri>();
print('profile url = $profileUrl');

// converting to a DateTime object
var dateOfBirth = v.child('dateOfBirth').as<DateTime>();
print('age = ${DateTime.now().difference(dateOfBirth).inDays} days');

// converting to a DateTime object with alternative format
var createAt = v.child('createdAt').as<DateTime>(format: 'epoch');
print('created at = $createAt');

// accessing a subfield
var addressLine1 = v.child('address/addressLine1').as<String>();
print('address = $addressLine1');

// or
addressLine1 = v.child('address').child('addressLine1').as();
print('address = $addressLine1');
}

copied to clipboard
Creating data object classes based on snapshots #

// create a mixin on a [SnapshotView]
mixin PersonMixin on SnapshotView {

// add getters for fields
String get firstname => get('firstname');

// no need to add type arguments, it will be detected automatically
Uri get profileUrl => get('profileUrl');

// add format parameter when not in a default format
DateTime get createdAt => get('createdAt', format: 'epoch');

}

// create a class extending a UnmodifiableSnapshotView with the mixin
// this will provide a `fromJson` constructor
class Person = UnmodifiableSnapshotView with PersonMixin;

void main() {
// registering a converter for the data class
var decoder = SnapshotDecoder()
..register<Map<String, dynamic>, Person>((v) => Person.fromJson(v));

var snapshot = Snapshot.fromJson({
'firstname': 'Jane',
'profileUrl': 'https://my.avatar.com/jane-doe.png',
'createdAt': 1593698272650
}, decoder: decoder);

var person = snapshot.as<Person>();

print('hello ${person.firstname}');
}
copied to clipboard

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.