我希望能够从树中删除小部件,或删除小部件的子级。我试图使用状态将小部件更改为null但它返回错误。有解决方案吗? 这是错误 https://gist.github.com/litekangel/e2037cf5dc4dbd9c0c0a9860ad3b0270
我终于找到了一个隐藏/移除小部件的解决方案:我只是用一个空小部件替换它(可能我会添加一个小动画)但我仍然在寻找一种更简洁的方法来做到这一点。
答案 0 :(得分:4)
在flutter中,您并不真正更新每次需要更改时实际生成新树的窗口小部件树。因此,您只需更改窗口小部件build
函数的返回值。
答案 1 :(得分:2)
如果你想要一个空小部件,Container()
是个不错的选择。
答案 2 :(得分:1)
答案 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()));
},
);