【问题标题】:How to Build All elements of sliverlist once?如何一次构建 sliverlist 的所有元素?
【发布时间】:2019-12-05 16:27:50
【问题描述】:

我正在制作一个带有 cmets 部分的屏幕,其中包含 cmets 及其子 cmets。

我使用 ScopedModel 来管理屏幕的状态。

cmets 的数据在列表中 并且对于子集在模型->列表内。 此数据在 ScopedModel 中。

我使用 SliverChildBuilderDelegate 构建了一个 sliverList,因此它只构建屏幕上的小部件。

每条评论(current_comment)都有一个回复按钮,输入后会在(current_comment)model->List末尾添加评论模型 并在 ScopedModel 上调用 notifyListener()

现在新添加的子评论有一个标签,将其标识为新评论。

我想要什么:

我希望屏幕滚动到新添加的子评论。

我尝试了什么:

由于新添加的子评论可以通过标签来识别,因此我在构建该评论小部件时为其添加了一个 GlobalKey。然后在构建完成后,我使用从添加到它的 GlobalKey 获得的偏移量滚动到该位置。

我的问题:

由于 SliverList 构建的元素仅对屏幕可见,因此新添加的评论远低于父评论(因为回复评论按钮仅在父评论上)并且尚未构建。因此构建器尚未将 GlobalKey 附加到它。

现在,我如何自动滚动到它?

由于 key 尚未附加到它,我如何定位它的位置并滚动到它?

建议我一种方法来一次构建 Sliverlist 的所有元素,以便可以将键附加到元素或其他策略,以便自动滚动到新添加的评论。

【问题讨论】:

标签: flutter dart flutter-sliver scoped-model


【解决方案1】:

第一个解决方案是将shrinkWrap 属性设置为true 到列表视图,以便一次呈现所有子视图,因此将 GlobalKey 分配给它。

第二种解决方案是使用列代替,这将导致一次渲染所有子项。

当孩子太多时,这两种解决方案都不适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 2019-06-30
    • 2020-03-04
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多