首页 > 解决方案 > 使 ListView 滚动到一个偏移量

问题描述

我试图在 listView 的屏幕上显示顶部元素以完全显示或向上滚动。

child: NotificationListener<ScrollEndNotification>(
          onNotification: (_) {
            double h = 120;
            double remaining = controller.position.pixels % h;
            int offset = 0;
            offset = (remaining > 60)
                ? ((controller.position.pixels ~/ h) + 1) * 120
                : ((controller.position.pixels ~/ h)) * 120;
            if (offset > 0) 
                controller.animateTo(offset.toDouble(),
                           duration: Duration(milliseconds: 500), curve: Curves.easeInOut);
            return true;
          },
          child: ScrollConfiguration(
            behavior: NoEffectScrollBehaviour(),
            child: ListView.builder(
                padding: EdgeInsets.zero,
                controller: controller,
                physics: BouncingScrollPhysics(),
                itemBuilder: (c, i){.......}

但控制器没有滚动到指定位置。我怎样才能使它成为 listView Elenent 来显示或动画偏移?

编辑:

我正在滚动结束事件上进行转换。问题是我无法在 NotificationListner 中做到这一点。

标签: flutterdartflutter-listview

解决方案


首先,您不需要 NotificationListener。您可以简单地使用以下方法。

如果你想滚动第一个元素或滚动到顶部,你可以使用

controller.animateTo(0,duration: Duration(milliseconds: 500), curve: Curves.easeInOut);

如果你想去特定的项目,你可以使用

final listItemHeight = 50;
final itemIndex = 3;
controller.animateTo(listItemHeight * itemIndex,duration: Duration(milliseconds: 500), curve: Curves.easeInOut);

推荐阅读