【问题标题】:Flutter add remove widget from tree generated from Nested Lists or list of lists object that is needed to be updatedFlutter 从嵌套列表或需要更新的列表对象列表生成的树中添加删除小部件
【发布时间】:2021-07-20 22:29:58
【问题描述】:

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

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 实例重建小部件树的解决方案。

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

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

【问题讨论】:

    标签: flutter listview dart flutter-animatedlist


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      相关资源
      最近更新 更多