model_json

This package helps you with managing object models for databases.

Getting started

Define some object for a database, for example User, extend it from Equatable and mixin Model.

class User extends Equatable with Model {
  final String id;
  final String name;
  final List<String> list;

  User({
    required this.id,
    required this.name,
    required this.list,
  });
}

Due to limitations in Dart, specifically an inability to use types derived from variables as parameters for generics, model_json relies on type_plus. To use model_json, add your classes to type_plus's class definitions like so:

void main() {
  . . .
  TypePlus.add<User>();
  . . .
}

Feel free to move this process to a separate function in case you have many classes.

Usage

Parse from JSON

Say we send a request GET /user?id= and the response body contains a user object as JSON. Let's parse it:

final client = http.Client;
final uri = Uri.http(
    "localhost:5000",
    "/user",
    queryParameters: {"id": "awd3512gf"},
);
final response = await client.get(uri);

final user = Model.fromJson<User>(response.body);

Parse to JSON

All classes that mixin Model have toJSON method. Say we want to save a user object in the database with a request POST /user?id=&name=&list=

final client = http.Client;
final uri = Uri.http(
    "localhost:5000",
    "/user",
    queryParameters: User.toJson(),
);
final response = await client.post(uri);

Comparison of objects

User extends Equatable, and Model implements props method. So User objects now can be compared by value.

final test1 = User(id: '1', name: 'john doe', list: ['hello', 'world']);
final test2 = User(id: '1', name: 'john doe', list: ['hello', 'world]');

test1 == test2; // true

Contributors

  • Alexey Tkachenko (@da-the-dev)
  • Michael Zimin (@N0taName)

Libraries

model_json