【问题标题】:Flutter:Scrolling To Bottom Automatically when the screen opensFlutter:屏幕打开时自动滚动到底部
【发布时间】:2018-12-06 16:32:47
【问题描述】:

我正在使用 onpressed() 向下滚动到列表视图的底部, 但我想在不按按钮的情况下实现这一点,

它必须在每次打开屏幕时自动滚动。 我试图把它放在 initState() 它的不工作,但如果我按下按钮它工作

如何让它自动滚动?

工作代码:

 floatingActionButton: new FloatingActionButton(child: 
 Icon(Icons.arrow_downward),onPressed:_hola,)



_hola(){
  print("inti state started successfully");
controller1.animateTo(
controller1.position.maxScrollExtent,
  duration: const Duration(milliseconds: 10),
   curve: Curves.easeOut,);
}

非工作代码: //这段代码打印成功,但没有真正调用函数

class HomeState extends State<MyNewMessages> {
  @override
  void initState() 
{
 super.initState();
  print("hola is scrolling");
  _hola;
}
);
}

在按下浮动按钮之前 按下浮动按钮后

【问题讨论】:

  • 检查您使用的列表是否有reverse构造函数参数并传递true,然后它会自动滚动到底部。您还需要以相反的顺序查询数据。
  • @GünterZöchbauer 是的,我只使用反向,问题是它没有滚动到完整列表的底部,它隐藏了一些数据,我的列表有 14 个条目,但它只显示 8 个条目,即使我使用 reverse=false 也会发生这种情况
  • 听起来很奇怪。您使用的是什么列表?
  • @GünterZöchbauer 这是facebook.com/rajesh.JumpRoper/videos/2129228357301990的视频
  • @GünterZöchbauer Listview.Builder,只需从 firebase 获取一个集合,然后将它们显示为列表视图

标签: listview flutter flutter-layout flutter-sliver flutter-animation


【解决方案1】:

在构建您的 ListView 或添加项目时(不确定您是如何做到的),使用 SchedulerBinding.instance.addPostFrameCallback 更改下一帧的滚动位置。

SchedulerBinding.instance.addPostFrameCallback((_) {
  controller1.animateTo(
    controller1.position.maxScrollExtent,
    duration: const Duration(milliseconds: 10),
    curve: Curves.easeOut,);
  });
}

【讨论】:

  • 飞利浦,试过你的代码,它不起作用,因为我没有添加手动条目,我从 Firebase 获取一个集合然后创建一个 Listview Builder,它在我点击按钮时滚动到所需的位置,但我想要为每个页面打开自动滚动
  • 您仍然可以在 Firebase 更改结果后调用该函数。
  • 谢谢飞利浦,我会尝试这种方法,但我已经通过临时修复解决了这个问题,我只是从 firebase 中反转了排序值,
  • 我通常不会在这里说谢谢,但这次我必须对@JacobPhillips 为这个解决方案说声谢谢!我花了几个小时试图完成这个结果,SchedulerBinding(这对我来说是全新的)让我很开心。谢谢老兄!
  • 谢谢你,@JacobPhillips!在几周的时间里,我花了好几个小时试图找到解决这个问题的方法。使用ScheduleBindingaddPostFrameCallback 可以完成工作
猜你喜欢
  • 1970-01-01
  • 2013-01-23
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多