颤振 - 无法滚动到列表底部查看



我有这样的代码:

Column(children: [
Container(
alignment: Alignment.centerLeft,
child: IconButton(
color: theme.iconTheme.color,
icon: const Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context);
},
),
),
Expanded(
child: ListView(
children: allOperations,
controller: listViewController,
),
),
]);

我想在小部件构建完成后滚动到底部。

WidgetsBinding.instance?.addPostFrameCallback((_) {
listViewController.jumpTo(listViewController.position.maxScrollExtent);
});

但它不起作用。始终保持150像素左右向下滚动。

有人有这个问题吗?

UPDATE它保留要向下滚动的像素数,具体取决于ListView中的元素数。例如,如果我有20个元素,那么底部将保留大约50px,如果是30,那么大约80px。

问题示例(假设小部件占据屏幕的全部高度,如果高于屏幕,则可以滚动(:
ListView的全部高度:2000px
屏幕高度:600px
maxScrollExtent应为1400px,但为1300px

您是否试图在列表下面留下一些空白?这通常是一个SizedBox,它可以让你看到列表的其余部分,然后根据你选择的大小留下更多。

在滚动之前添加Timer可能会解决您的问题,我想listview需要一些时间来添加新项目。

Timer(Duration(milliseconds: 100), () {
WidgetsBinding.instance?.addPostFrameCallback((_) {
listViewController.jumpTo(listViewController.position.maxScrollExtent);
});
});

你也可以尝试";animateTo";相反:

Timer(Duration(milliseconds: 100), () {
listViewController.animateTo(
listViewController.position.maxScrollExtent,
curve: Curves.easeOut,
duration: const Duration(milliseconds: 750),
);
});

最新更新