如何强制ScrollController重新计算position.maxExtents?

sha*_*ais 6 flutter flutter-layout

我正在尝试创建一个桌面样式的滚动条,它根据内容的大小更改其大小。我的滚动条与列表共享 ScrollController,并依赖position.maxExtents 来了解内容区域有多大。

问题是,当我更改行数时,maxExtents 将不会更新,直到启动滚动事件。

我用这样的代码解决了这个问题,在 100 毫秒内向上移动 1px,向下移动 1px:

widget.controller.jumpTo(controller.position.pixels + 1);
Future.microtask(() => widget.controller.animateTo(controller.position.pixels - 1, duration: 100.milliseconds, curve: Curves.linear));
Run Code Online (Sandbox Code Playgroud)

当列表可以滚动时,它的效果非常好。但是,当列表 < 视图的高度时,它无法滚动,并且这些调用没有效果,并且我陷入了陈旧的 maxExtents 困境。

我怎样才能告诉列表:“嘿,列表,重新计算你的孩子!”?

小智 2

您可以使用以下命令将代码延迟到控制器更新后。

WidgetsBinding.instance.addPostFrameCallback((_) {
  ...your code which requires controller's max extents...   
});
Run Code Online (Sandbox Code Playgroud)