更新颤动的冻结类中的深层嵌套数组

问题描述 投票:0回答:1

我在扑打中有一个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()方法,但是当像我的场景中那样嵌套很深时,我无法弄清楚。

arrays flutter dart immutability
1个回答
0
投票

您可以将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'),
])
© www.soinside.com 2019 - 2024. All rights reserved.