如何从树中删除小部件

时间:2017-05-04 09:07:11

标签: dart flutter

我希望能够从树中删除小部件,或删除小部件的子级。我试图使用状态将小部件更改为null但它返回错误。有解决方案吗? 这是错误 https://gist.github.com/litekangel/e2037cf5dc4dbd9c0c0a9860ad3b0270

我终于找到了一个隐藏/移除小部件的解决方案:我只是用一个空小部件替换它(可能我会添加一个小动画)但我仍然在寻找一种更简洁的方法来做到这一点。

4 个答案:

答案 0 :(得分:4)

在flutter中,您并不真正更新每次需要更改时实际生成新树的窗口小部件树。因此,您只需更改窗口小部件build函数的返回值。

答案 1 :(得分:2)

如果你想要一个空小部件,Container()是个不错的选择。

答案 2 :(得分:1)

对于那些来这里尝试以设计方式从窗口小部件树中删除窗口小部件的人,您可以从上下文菜单中选择删除此窗口小部件

enter image description here

这只会删除所选的小部件(如填充),但保留其子级。

答案 3 :(得分:0)

另一种替换树中小部件的好方法是给小部件一个key

(如果键更改,Flutter将重建子树。)

因此,假设您有一个StreamBuilder,并且出于某种原因,每次都需要从头开始构建子窗口小部件(可能是由于依赖项注入,其中一个依赖项发生了更改),您可以执行以下操作:

StreamBuilder(
  stream: bloc.myDependencyChanged, // A hypothetical bloc which notifies when a relevant dependency has changed.
  builder: (_, snap) {
    final dep = MyChangingDependency();
    // MyWidget will NOT get reused by flutter if the key changes.
    return MyWidget(dep, key: ValueKey(dep.getId()));
  },
);