如何构建一次银条列表的所有元素?



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

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

注释的数据位于 List<-model-> 中,子注释的数据位于 model->List<-model-> 中。 此数据位于 ScopedModel 中。

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

每个注释 (current_comment) 都有一个回复按钮,键入后,在 (current_comment)model-> List<-model-> 的末尾添加一个注释模型,并在 ScopedModel 上调用 notifyListener()

现在,新添加的子注释有一个标记,将其标识为新注释。

我想要什么:

我希望屏幕滚动到新添加的子注释。

我尝试过:

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

我的问题 :

由于 SliverList 构建的元素仅对屏幕可见,因此新添加的注释远低于父注释(因为回复注释按钮仅在父注释上),并且尚未构建。 所以构建器还没有将全局密钥附加到它。

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

由于密钥尚未附加到它,如何找到它的位置并滚动到它?

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

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

第二种解决方案是改用列,这将导致一次呈现所有子级。

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

最新更新