artifact 1.0.9 copy "artifact: ^1.0.9" to clipboard
artifact: ^1.0.9 copied to clipboard

Data Modeling for the local madman

Map objects to maps or json without part files or any nonsense! Just an annotation!

flutter pub add artifact
flutter pub add artifact_gen --dev
import 'package:artifact/artifact.dart';
@artifact // Artifact is all you need!
class Animal {
  @rename("hp")
  final int health;
  String? someNonSerializableField;
  
  // Parameters define what is mapped
  // Default values are used if not set
  // Required parameters will throw if not set
  const Animal({this.health = 100});
}

Let's add two subclasses for animals

@artifact
class Dog extends Animal {
  final bool goodBoy;

  const Dog({@rename("hp") super.health = 125, this.goodBoy = true});
}
@artifact
class Cat extends Animal {
  final int lives;
  
  const Cat({@rename("hp") super.health = 70, this.lives = 9});
}

Lets put this in a world object

@artifact
class World {
  final List<Animal> animals;
  
  const World({this.animals = const []});
}

Then use it!

World world = World(
  animals: [
    Dog(goodBoy: true),
    Cat(lives: 8, health: 50),
  ]
);

print(jsonEncode(world.toMap()));
{
  "animals": [
    {
      "_subclass_Animal": "Dog",
      "hp": 125,
      "goodBoy": true
    },
    {
      "_subclass_Animal": "Cat",
      "hp": 50,
      "lives": 8
    }
  ]
}

CopyWith also exists since artifacts are immutable

You deserialize with the generated extension

$Animal.fromMap(...);
0
likes
130
points
80
downloads

Publisher

verified publisherarcane.art

Weekly Downloads

Data Modeling for the local madman

Repository (GitHub)

Documentation

API reference

License

GPL-3.0 (license)

Dependencies

fast_log, toxic

More

Packages that depend on artifact