什么是build_value对象的设置器

时间:2018-07-27 10:58:05

标签: flutter code-generation json-serialization

我正在尝试在flutter中使用build_value,发现如果我声明一个类型使用build_value,我通常可以使用点语法来为其属性分配值: 我的声明是:

abstract class Post implements Built<Post, PostBuilder> {
    Post._();
    int get userId;
    int get id;
    String get title;
    String get body;
    factory Post([updates(PostBuilder b)]) = _$Post;
    static Serializer<Post> get serializer => _$postSerializer;
}

并像这样使用它:

Post p = Post();
p.titie = "hello world";

得到错误:

  

[dart]在“ Post”类中​​没有名为“ title”的二传手。

我并不熟悉builder,甚至发现PostBuilder都有所有属性的设置器:     PostBuilder()。title ='hello world'; 但是我该怎么用呢?

2 个答案:

答案 0 :(得分:2)

BuiltValue类是不可变的。这是它的主要功能之一。
不变性意味着您无法修改实例。每次修改都必须产生一个新实例。

几种方法之一是

p = (p.toBuilder().titie = 'hello world').build();

获取更新的实例。

或者

p = p.rebuild((b) => b..title = 'hello world');

答案 1 :(得分:1)

实际上,只有full example和源代码。

// Values must be created with all required fields.
final value = new SimpleValue((b) => b..anInt = 3);

// Nullable fields will default to null if not set.
final value2 = new SimpleValue((b) => b
..anInt = 3
..aString = 'three');

// All values implement operator==, hashCode and toString.
assert(value != value2);

// Values based on existing values are created via "rebuild".
final value3 = value.rebuild((b) => b..aString = 'three');
assert(value2 == value3);

// Or, you can convert to a builder and hold the builder for a while.
final builder = value3.toBuilder();
builder.anInt = 4;
final value4 = builder.build();
assert(value3 != value4);