我在扑打中有一个freezed类,如下所示:
@freezed
abstract class Data with _$Data {
const factory Data({
String id,
String name,
String parentId,//null if it is the root element
@Default([]) List<Data> children,
}) = _Data;
}
该类包含一个名为children
的属性,该属性是同一类的列表,即Data
。
当前允许的最大嵌套深度为20级。我面临的问题是如何通过添加或删除项目来更新特定的深层嵌套children
列表。同样,应在保持不变性的情况下进行此更新,并返回新的更新的Data
类。
我尝试在冻结的类上使用copyWith()
方法,但是当像我的场景中那样嵌套很深时,我无法弄清楚。
您可以将copyWith
与扩展运算符(...)组合以克隆列表。
假设您有:
abstract class Data with _$Data {
const factory Data({
String name,
@Default([]) List<Data> children,
}) = _Data;
}
var root = Data(
name: 'root',
children: [
Data(name: 'first'),
],
)
您可以通过执行以下操作来克隆树并将子级添加到root
:
root = root.copyWith(children: [
...root.children,
Data(name: 'second'),
])