我仍在学习,并试图习惯上课等。。我不确定是否可以,但是我有一个班级要传递到屏幕上。然后在该屏幕上,我处理来自一个字段的数据,然后我将相同的值(除了我所做的工作之外)传递给具有相同内容的下一页。
例如,使用下面的类,我也可以让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)的事情,那将是很棒的。
谢谢!
答案 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"];
});