【发布时间】:2019-01-14 10:34:26
【问题描述】:
我有一个包含listView 和floatingActionButton 的父级我想在用户开始滚动时隐藏floatingActionButton 我已经设法在父级小部件中执行此操作,但这需要重新构建列表每一次。
我已将floatingActionButton 移至单独的类,因此我可以更新状态并仅重建该小部件我遇到的问题是将数据从父类中的ScrollController 传递给子类,这很简单通过导航来完成,但如果不重建父级,接缝会更尴尬!
【问题讨论】:
-
你能发布你的代码吗?
-
您可以为 FAB 使用 GlobalKey,然后使用它从 ScrollController 访问 FAB。这是一种不被鼓励的模式,但可能适合您的需求。一种在架构上更合理的方法是使用 Flutter Redux (pub.dartlang.org/packages/flutter_redux) 之类的东西来响应操作。
-
OP,您确定
setState确实导致了性能问题吗?晶圆厂只会偶尔消失/重新出现。 Flutter 针对这类东西进行了优化。小部件非常轻量级,当您调用setState时,不会释放/重建底层的重型 UI 对象。 -
@boformer 我的印象是 setState 的目的是重建 UI 已经发生了变化 docs.flutter.io/flutter/widgets/State/setState.html 但要回答这个问题,不,我不能确定我只是在学习颤振,它看起来喜欢它的剂量与我期望的有点不同,我应该或可以向父母请求重建吗?我确实注意到,当我进行实时重新加载时,如果我在实时重新加载之前向下滚动页面,状态有时会发生变化!
-
重建的问题在于它的速度很慢,因此由于重建需要很长时间,因此不值得隐藏按钮并查看他们所说的一些关于不重建的谷歌教程不需要像父级一样重建的元素列表中没有任何变化,但它仍在重建我不是 100% 确定,但这可能是因为它是从 firestore 构建的!也许我应该保存列表的本地副本并进行比较...无论如何我已经接受了您的回答,谢谢。