alibaba / fish-redux

An assembled flutter application framework.
https://github.com/alibaba/fish-redux
Apache License 2.0
7.33k stars 843 forks source link

如何实现ListView滚动到未在可视区域内的数据项? #609

Closed SeptSky closed 4 years ago

SeptSky commented 4 years ago

我通过ListAdapter实现了ListView的数据显示,列表中每条数据项的高度由显示的内容决定,所以不是等高的。由于计算数据项的偏移位置需要使用数据项自身的context,所以滚动操作的代码放在了数据项的effect中实现,如下所示: void _onScrollToEntity(Action action, Context<EntityState> ctx) { final int entityId = action.payload[ParamNames.entityIdParam]; if (entityId == ctx.state.keyId) { final Context<InfoNavPageState> parentContext = action.payload[ParamNames.contextParam]; final ScrollController scrollController = parentContext.state.scrollController; final RenderBox box = ctx.context.findRenderObject(); final Offset offset = box.localToGlobal(Offset.zero); final Duration duration = Duration(milliseconds: 500); scrollController.animateTo(offset.dy - 80.0, duration: duration, curve: Curves.decelerate); } } 现在遇到了这样的问题:如果指定的数据项在可视区域内,上述代码能够被执行到,所以能正确实现滚动操作。然而,当指定的数据项不在可视区域内,上述代码就不能被触发执行。所以,这样的情况使用fish-redux该如何解决? 谢谢!

zjuwjf commented 4 years ago

可以在Scroll 一级的 component或者page中添加 滚动到第n项(所需的长度)的逻辑。 本身这个应该是一个和框架无关的问题。

SeptSky commented 4 years ago

@zjuwjf 主要问题在于非固定高度的数据项的偏移位置需要使用数据项自身的context,非常感谢!