【发布时间】:2021-11-15 23:41:02
【问题描述】:
我想在收到来自 bloc 的新状态后更新 _scrollController 的初始偏移量。基本上,这是一个必须适应来自玩家的新时间的时间线。
这就是我在有状态小部件中所做的事情
void initState() {
_scrollController =
ScrollController(initialScrollOffset: 100); //
super.initState(); }
这是自定义滚动视图
BlocBuilder<Timer, TimestampState>(builder: (context, state) {
calculatedScrollOffset = state.time.pixels;
_scrollController = ScrollController(initialScrollOffset: calculatedScrollOffset);
return CustomScrollView(
controller: _scrollController,
reverse: false,
scrollDirection: Axis.horizontal,
slivers: timeLinePieces,
),
);
不幸的是,没有公共二传手可以做类似_scrollController.offset= 200 的事情。当我调试此代码时,调试中有详细信息,但是一旦新状态来自 bloc,我就会看到 ScrollController 的“无客户端”。
实现这一目标的最佳方法是什么?每次收到新的TimestampState 时,我都尝试渲染新的时间线小部件,但这也没有任何效果。理想情况下,我想使用 setState 为偏移量绑定一个新值并再次渲染小部件以查看效果。
【问题讨论】:
-
你需要使用 _scrollController.jumpTo() 或 .animateTo() 在 build 中调用 ScrollController 的构造函数。
-
这正是我想要实现的。谢谢!
if (_scrollController.hasClients) { Future.delayed(Duration(milliseconds: 1), () { _scrollController.jumpTo(_scrollController.position.pixels + 0.1); }); } -
很高兴能帮上忙。但考虑在 postFrameCallback 中调用 .jumpTo。它用于注册构建后要执行的回调方法。我会在答案中告诉你。
标签: flutter