Flutter缓慢滚动到动态Listview的底部

Posted

技术标签:

【中文标题】Flutter缓慢滚动到动态Listview的底部【英文标题】:Flutter scroll slowly to the bottom of a dynamic Listview 【发布时间】:2021-07-25 07:21:09 【问题描述】:

我有一个列表视图,它的项目可能每次都不同。我想让它自动滚动。

我试过这段代码

scrollController.animateTo(
      scrollController.position.maxScrollExtent,
      duration: Duration(seconds: 10),
      curve: Curves.easeOut);

它非常适用于小型列表视图,但是当列表视图项目为 100 或更多时,它开始移动得如此之快。

当列表视图有更多项目但它混乱时,我也尝试延长持续时间

【问题讨论】:

你是通过api获取数据的吗? 数据不是问题我从本地数据库正确获取数据。 您是否一次获取所有数据?或者你正在使用分页? 是的,我立即获取数据并填充列表视图,然后我希望它开始滚动。 【参考方案1】:

问题是由动画本身引起的,而不是由持续时间引起的。 我通过增加持续时间和设置来解决它 curve: Curves.linear.

【讨论】:

【参考方案2】:
// Declaring the controller and the item size
ScrollController _scrollController;
final itemSize = 100.0;

// Initializing
@override
void initState() 
  _scrollController = ScrollController();
  _scrollController.addListener(_scrollListener);
  super.initState();


// Your list widget (must not be nested lists)
ListView.builder(
      controller: _scrollController,
      itemCount: <Your list length>,
      itemExtent: itemSize,
      itemBuilder: (context, index) 
          return ListTile(<your items>);
      ,
),

// With the listener and the itemSize, you can calculate which item
// is on screen using the provided callBack. Something like this:
void _scrollListener() 
  setState(() 
    var index = (_scrollController.offset / itemSize).round() + 1;
  );

【讨论】:

没有时间不是问题。我已经说过,当我设置更长的时间时,它仍然可以工作,但它会以一种凌乱的方式移动。就像它停止然后移动 scrollController.position.maxScrollExtent 更改此 改成什么? 我改了答案看看 项目大小不是静态的,它会根据里面的内容而改变。有没有其他不使用高度的解决方案【参考方案3】:
import 'dart:async';
import 'package:flutter/material.dart';

class Home extends StatefulWidget 
  @override
  _HomeState createState() => _HomeState();


class _HomeState extends State<Home> 
  final _controller = ScrollController();
  
  @override
  void dispose() 
    _controller.dispose();
    super.dispose();
  

  @override
  Widget build(BuildContext context) 
    Timer(
      Duration(seconds: 2),
          () => _controller.animateTo(
            _controller.position.maxScrollExtent,
            duration: Duration(seconds: 2),
            curve: Curves.fastOutSlowIn,
          ),
    );
    return Scaffold(
      body: ListView.builder(itemBuilder:(context, index) 
        return Text('hi');
      ,
     controller: _controller,
      )
    );
  


【讨论】:

这段代码等待两秒钟,然后开始快速滚动。我的问题是快速滚动,但不是时间问题 您可以使用Curves.easeIn 或任何其他类。有很多选择。 检查***.com/questions/43485529/… 谢谢 Ujjwal。我通过将曲线设置为Curves.linear来解决它。

以上是关于Flutter缓慢滚动到动态Listview的底部的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 应用程序中的 ListView 滚动上隐藏/关闭键盘

Flutter:我的 Listview.builder 消失在我的固定底部容器下

如何滚动 ListView 中的项目使其可见?

关注 ListView 的底部?扑

将 Text 小部件添加到其子项映射到 Flutter 的 ListView?

如何让内部有状态小部件接收到 Flutter 中的滚动事件?