【问题标题】:Make ListView to scroll to an offset使 ListView 滚动到一个偏移量
【发布时间】:2021-11-28 02:12:45
【问题描述】:

我正在尝试在 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 中做到这一点。

【问题讨论】:

    标签: flutter dart flutter-listview


    【解决方案1】:

    首先你不需要 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);
    

    【讨论】:

    • 当滚动结束时,我正在决定天气是否显示第一个元素。通过 notificationListner 我正在监听滚动结束事件。
    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2016-05-13
    • 2018-05-14
    • 2016-03-20
    相关资源
    最近更新 更多