我正在构建一个聊天应用程序。我希望每当打开聊天类时,它最初都会滚动到max。 我尝试了以下代码,但这是错误的
void initState() {
super.initState();
scrollController = ScrollController();
scrollController.animateTo(scrollController.position.maxScrollExtent,
duration: Duration(milliseconds: 10), curve: Curves.easeOut);
}
答案 0 :(得分:0)
可能所有可滚动的小部件都尚未在initstate
中呈现。
准备好可滚动小部件后,您可以尝试更改滚动位置。
答案 1 :(得分:0)
使用addPostFrameCallback
中的SchedulerBinding
强制ScrollController
仅在构建过程完成时移动,以确保其具有从以下位置移出的初始位置:
导入Scheduler
:
import 'package:flutter/scheduler.dart';
修改您的initState()
:
void initState() {
super.initState();
scrollController = ScrollController();
SchedulerBinding.instance.addPostFrameCallback((_) => scrollController.animateTo(scrollController.position.maxScrollExtent, duration: Duration(milliseconds: 10), curve: Curves.easeOut));
}
答案 2 :(得分:0)
我也在构建一个集成了聊天功能的应用程序,但我遇到了同样的问题。我在构建时通过使其addPostFrameCallback
对其进行了修复。每次重建小部件时都会调用它。
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_) {
scrollController.jumpTo(positionToScroll);
}
}
您可以使用animateTo
代替jumpTo
,它仍然可以正常工作。