【问题标题】:flutter scroll GridView with NeverScrollableScrollPhysics使用 NeverScrollableScrollPhysics 颤动滚动 GridView
【发布时间】:2019-07-01 17:43:58
【问题描述】:

我的应用中有一个页面,如下图所示。顶部有一个容器。接下来是一个带有水平滚动的 ListView。在物理设置为 NeverScrollableScrollPhysics 的 GridView 下方。后者是因为网格应该随着页面滚动,然后像页面/无限一样加载数据。 我尝试使用 ScrollController 但不确定如何在此设置中正确连接它。 ListView 和 GridView 具有单独的流,它们在其中侦听数据。我尝试使用 ScrollController 和侦听器在 Stateful 小部件中创建 GridView,但没有运气激活滚动事件。它是否应该以某种方式连接到页面滚动,因为我在网格上有 NeverScrollableScrollPhysics?

更新: 我想我找到了解决办法。外部 ListView 有一个控制器,我将其设置为 ScrollController。当大小几乎是网格的大小时,我触发加载更多网格项的侦听器。这样我可以保留 GridView,否则我认为@Lucas 的解决方案可能很好。根据文档,与 SingleChildScrollView https://docs.flutter.io/flutter/widgets/SingleChildScrollView-class.html 相比,ListView 的性能应该更好@

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以通过多种方式实现这一目标。但是,不知何故,您必须避免嵌套垂直滚动。

    我会使用ListView.builder 作为所有内容的父级,如果索引为0,则构建一个Column,顶部为Container,水平方向为ScrollView,否则构建一个带有两个孩子的Row(这个而不是GridView)。

    【讨论】:

    • Ahhh 我明白你的意思,这将使布局保持简单,但需要我手动构建“网格”样式。目前我有一个 ListView 作为父级,有一个 Container/Card,有一个水平滚动的 ListView,然后是一个 GridView。它在 GridView 上,我禁用了 Physics 并且有点迷路了 :)
    • 您可能会发现Rows 具有更大的灵活性,而不是更多的“样式”,并避免了 GridView 中的额外开销,因为滚动等您没有使用。虽然这可能并不重要。
    • 我认为您正在寻找的最“正确”的解决方案是具有不同条子的自定义 ListView,但这最终会变得非常复杂,您可能希望使用 @987654329 @s 方法 ;)
    • 你让我三思而后行。我可以理解你所说的灵活性是什么意思,当然,没有 GridView 的解决方案也会更轻量级。感谢您的所有反馈
    猜你喜欢
    • 2019-05-15
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2020-08-14
    相关资源
    最近更新 更多