在课堂上颤抖地改变单一价值?

时间:2020-09-21 20:24:33

标签: flutter dart

我仍在学习,并试图习惯上课等。。我不确定是否可以,但是我有一个班级要传递到屏幕上。然后在该屏幕上,我处理来自一个字段的数据,然后我将相同的值(除了我所做的工作之外)传递给具有相同内容的下一页。

例如,使用下面的类,我也可以让page1也通过示例...然后在第一页上,我阅读List1并将列表编辑为其他内容...然后我想将示例传递给page2,但列表现在包含我处理过的数据,而不是原始数据。

class Sample {
  final String field1;
  final String field2;
  final String field3;
  final String field4;
  final List List1;
  Sample({ this.field1, this.field2, this.field3, this.field4, this.List1 });
}

我目前正在通过传递未通过widget.Sample.field1等更改的每个字段来解决它,但是如果我添加一个新字段,则需要记住在所有页面上进行设置。如果我可以做类似widget.Sample.replace(List1,NewList)的事情,那将是很棒的。

谢谢!

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我认为您正在寻找的是copyWith模式。您可以创建结构的副本,并且仅修改要更改的内容。手工编写非常简单,但是也有一些软件包可以帮助您生成此代码。


class Sample {
  final String field1;
  final String field2;
  final String field3;
  final String field4;
  final List list1;

  Sample({
    this.field1,
    this.field2,
    this.field3,
    this.field4,
    this.list1,
  });

  Sample copyWith({
    String field1,
    String field2,
    String field3,
    String field4,
    List list1,
  }) =>
      Sample(
        field1: field1 ?? this.field1,
        field2: field2 ?? this.field2,
        field3: field3 ?? this.field3,
        field4: field4 ?? this.field4,
        list1: list1 ?? this.list1,
      );
}

final sample = Sample(
  field1: 'foo',
  field2: 'bar',
  list1: ['cat', 'dog'],
);

sample.field1; /// 'foo'
sample.field2; /// 'bar'
sample.list1; /// ['cat', 'dog']

final anotherSample = sample.copyWith(
  field3: 'batz',
  list1: [...sample.list1, 'armadillo'],
);

sample.field1; /// 'foo'
sample.field2; /// 'bar'
sample.field3; /// 'batz'
sample.list1; /// ['cat', 'dog', 'armadillo']

请记住,此实现很简单,不会设置null值。

代码生成器:

答案 2 :(得分:0)

您可以通过删除final关键字来更新实例变量(List List1)。 Dart支持隐式getter和setter。因此,通过使用setter,我们可以更新列表,而无需创建新对象并将所有其他/更新后的属性复制到该对象。

要更新列表

setState(() {
   model.List1=["X","Y","Z"];
});