Flutter Scrollcontroller maxScrollExtent直到列表末尾才运行

kgsdhlau  于 2023-05-08  发布在  Flutter
关注(0)|答案(6)|浏览(245)

它在列表中的最后一个元素之前停止。有没有一种方法可以到达最后一个元素的结束容器

controller
          ..animateTo(
            controller.position.maxScrollExtent,
            curve: Curves.easeIn,
            duration: const Duration(milliseconds: 300),
          );
      });```
t9aqgxwy

t9aqgxwy1#

使用无动画解决了问题

Timer(Duration(milliseconds: 500), () {
        controller.jumpTo(controller.position.maxScrollExtent);
      });
cnjp1d6j

cnjp1d6j2#

在我的例子中,问题是元素的大小不相等,直到渲染才知道大小。因此,ListView滚动到其初始估计的maxScrollExtent,但在滚动时,元素被渲染,新的maxScrollExtent更大。我通过给它一个更大的值来破解它:

attachmentsScrollController.animateTo(
  attachmentsScrollController.position.maxScrollExtent * 2,
  duration: Duration(milliseconds: 300),
  curve: Curves.easeInOut);
gywdnpxw

gywdnpxw3#

我认为这是最好的功能滚动到底部一个很好的动画

scrollToBottom() {
if (_chatController.hasClients) {
      Future.delayed(const Duration(milliseconds: 500)).then((value) {
        _chatController.animateTo(
          _chatController.position.maxScrollExtent,
          duration: const Duration(milliseconds: 200),
          curve: Curves.fastOutSlowIn,
        );
      });
    }
}
axr492tv

axr492tv4#

我有同样的问题与CustomeScrollView小部件,我解决了这个.

CustomScrollView(
                  controller: Get.find<ChatController>(tag: 'chatDetail')
                      .scrollController
                      .value,
                  reverse: true,
                  keyboardDismissBehavior:
                      ScrollViewKeyboardDismissBehavior.onDrag,
                  physics: ClampingScrollPhysics(),
                  cacheExtent: 99999, // <-- here !!! ADD THIS CODE
                  slivers: [
                    ChatList(
                      isQuestion: isQuestion,
                      postCreatedAt: postCreatedAt,
                      title: title,
                    ),
                  ],
                ),

我的滚动功能和我们之前说的一样正常。

void chatScrollUp() async {
await scrollController.value.animateTo(
    scrollController.value.position.maxScrollExtent,
    duration: Duration(
        milliseconds:
            (scrollController.value.position.maxScrollExtent / 2).round()),
    curve: Curves.easeOutCirc);}
r6hnlfcb

r6hnlfcb5#

对我有用的是:

void scrollAnimateToEnd(ScrollController controller) {
Future.delayed(const Duration(milliseconds: 400)).then((_) {
  try {
    controller
        .animateTo(
      controller.position.maxScrollExtent,
      duration: const Duration(seconds: 1),
      curve: Curves.fastOutSlowIn,
    )
        .then((value) {
      controller.animateTo(
        controller.position.maxScrollExtent,
        duration: const Duration(milliseconds: 200),
        curve: Curves.easeInOut,
      );
    });
  } catch (e) {
    print('error on scroll $e');
  }
});

}

gpfsuwkq

gpfsuwkq6#

我通过使用SingleChildScrollView而不是ListView解决了这个问题。

相关问题