Immer, but for dart. Convert between immutable and mutable objects.
Draft is inspired by immer.
import 'package:draft/draft.dart';
part 'example.draft.dart';
@draft
class Foo {
final int value;
const Foo({
required this.value,
});
}
void main() {
final foo1 = Foo(value: 1);
// Use the produce method
final foo2 = foo1.produce((draft) {
draft.value += 1;
});
assert(foo2.value == 2);
// Or create drafts inline
final fooDraft = foo.draft();
fooDraft.value = 10;
final foo3 = fooDraft.save();
assert(foo3.value == 10);
}
See the examples directory for more info.
First install draft and build runner, if you haven't already.
dart pub add dev:build_runner dev:draft_builder draft
Next define your drafts.
// example.dart
import 'package:draft/draft.dart';
part 'example.draft.dart';
@draft
class Foo {
final int value;
const Foo({
required this.value,
});
}
Then run the build runner.
dart run build_runner build --delete-conflicting-outputs