0

我有一个对象结构,其中包含相同类型对象的嵌套列表。如下 :

class NoteModel {
  String id;
  String data;
  List<NoteModel> children;

  NoteModel({
    this.id,
    this.data,
    List<NoteModel> children,
  }) : children = children ?? [];
}

和一个示例数据结构如下:

var _result = NoteModel(
      id: 'main Head',
      data: 'main Head Data',
      children: [
        NoteModel(
          id: ' child 1',
          data: 'child 1 data',
          children: [],
        ),
        NoteModel(
          id: 'child 2',
          data: 'child 2 data',
          children: [
            NoteModel(
              id: 'subchild 1',
              data: 'subchild 1 of child 2',
              children: [],
            ),
          ],
        ),
        NoteModel(
          id: 'child 3',
          data: 'child 3 data',
          children: [],
        )
      ],
    );

和 [Custom Widget] 将显示“id”、“data”和使用此结构的 [Custom Widget] 列表。当我尝试添加(将对象添加到子级的父小部件上的按钮)或删除(将自身从父级的子级列表中删除的子级小部件上的按钮)时,我的问题出现了。

NoteModel 的对象实例在按下按钮时发生变化,但是列表树没有刷新。我已经尝试了所有手动方法,并尝试使用 GetX。但是,当从树的深处添加/删除某些小部件时,我找不到会触发使用更新的 NoteModel 实例重建小部件树的解决方案。

但是,在此重建过程中,我只想重建某些部分以避免重建其他部分,例如子 [自定义小部件] 中不会更改的任何按钮。

请帮忙,我是新手,尝试了很多东西,但找不到任何解决方案来添加/删除嵌套子项中的操作。

4

1 回答 1

0

您的问题围绕小部件状态更新。您的代码片段不完整。所以我不知道你使用的是StatefullWidget还是StatelessWidget。不过,如果您想在数据更改时更新小部件树,您有两个选择:

  • 使用 StatefullWidget 并在setState((){})每次更新数据时调用。
  • 使用状态管理包,例如flutter_bloc。包装在 BlocBuilder 中的小部件将在状态更改时更新。

就个人而言,我会选择选项 2。使用 flutter_bloc 可以让您更细致地控制在小部件树中重建的内容。

于 2021-04-27T15:53:29.660 回答