Skip to content

josiahsrc/draft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Draft

Immer, but for dart. Convert between immutable and mutable objects.

⚠️ This package is in its early stages and the API will change.

Usage

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.

Set up

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

About

Immer, but for dart

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published