如何将滚动条的初始值设置为最大

时间:2019-08-15 16:38:14

标签: flutter dart

我正在构建一个聊天应用程序。我希望每当打开聊天类时,它最初都会滚动到max。 我尝试了以下代码,但这是错误的

  void initState() {
    super.initState();
    scrollController = ScrollController();
    scrollController.animateTo(scrollController.position.maxScrollExtent,
        duration: Duration(milliseconds: 10), curve: Curves.easeOut);
  }

3 个答案:

答案 0 :(得分:0)

可能所有可滚动的小部件都尚未在initstate中呈现。 准备好可滚动小部件后,您可以尝试更改滚动位置。

答案 1 :(得分:0)

使用addPostFrameCallback中的SchedulerBinding强制ScrollController仅在构建过程完成时移动,以确保其具有从以下位置移出的初始位置:

  1. 导入Scheduler

    import 'package:flutter/scheduler.dart';
    
  2. 修改您的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,它仍然可以正常工作。