如何让内部有状态小部件接收到 Flutter 中的滚动事件?
Posted
技术标签:
【中文标题】如何让内部有状态小部件接收到 Flutter 中的滚动事件?【英文标题】:How to make the inner stateful widget received the scroll event in Flutter? 【发布时间】:2020-04-11 18:48:12 【问题描述】:我在 ListView 中有一个 GridView,但 GridView 包含在不同的 Stateful 小部件中。我注意到我放在 GridView 上的 ScrollController 从未被调用,但我需要它以便我可以检测屏幕是否已到达底部,以便我可以加载下一批数据(无限滚动)。我该怎么做?我尝试将 primary: true
添加到 GridView 并将 primary: false
添加到 ListView 但它不起作用。
class UserProfile extends StatefulWidget
-> final userId: String;
-> build ()
-> ListView
-> children: [
-> User avatar
-> User name
-> Action button
-> TileGallery(userId: userId)
class TileGallery extends StatefulWidget
-> final _scrollController = Controller();
-> initState()
-> _scrollController.addListener(_onScroll);
-> build ()
-> GridView
-> controller: _scrollController
-> _onScroll() // never called
对不起,奇怪的代码。实际代码中有太多不相关的代码。问题是,我曾经将 TileGallery 用作独立的屏幕小部件(例如,在构建中有 Scaffold),当时,_onScroll()
函数被调用。我该如何解决这个问题?
【问题讨论】:
你能给我包含这个Controller
类的文件名吗?
【参考方案1】:
创建ScrollController
实例,而不仅仅是Controller
。
【讨论】:
有趣。但目前我不得不使用一种解决方法,将所有这两个小部件放在一个小部件中,以简化重建通知和数据流。将尝试在下一次小部件重构中使用您的解决方案。谢谢。以上是关于如何让内部有状态小部件接收到 Flutter 中的滚动事件?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - setState 不更新内部有状态小部件
我们如何使用 Flutter 中的底部导航栏触发有状态小部件以通过导航重建自身?