如何从树中删除小部件

Lit*_*gel 4 dart flutter

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

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

Ale*_*uin 6

在颤振中,您并没有真正更新小部件树,每次需要更改它时实际上都会生成一棵新树。因此,您只需更改小部件build函数的返回值。


Col*_*son 6

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

  • 据说“const SizedBox.shrink()”更好。 (3认同)

Dar*_*ron 5

替换树中小部件的另一个好方法是为您的小部件提供一个key.

(如果 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()));
  },
);
Run Code Online (Sandbox Code Playgroud)