Flutter:如何自动滚动到 SingleChildScrollView 的末尾

Posted

技术标签:

【中文标题】Flutter:如何自动滚动到 SingleChildScrollView 的末尾【英文标题】:Flutter : How to Automaticallly scroll to end of SingleChildScrollView 【发布时间】:2020-08-09 17:58:28 【问题描述】:

我有一个 SingleChildScrollView,它的 scrollDirection 设置为 Horizo​​ntal,其中 5 个子小部件放置在 Row Widget 内。 我想以编程方式滚动到行中的最后一个小部件,当到达最后一个小部件时(等待 2 秒)我想向后滚动。

SingleChildScrollView(
    scrollDirection:Axis.horizontal,
    child:Row(
            children:<Widget>[
                           Widget(),
                           Widget(),
                           Widget(),
                           Widget(),
                           Widget(),  
                         ],
            ), 
    ),

)

【问题讨论】:

【参考方案1】:

您可以通过以下方式使用滚动控制器来做到这一点。

 ScrollController _controller;
  @override
  void initState() 
    super.initState();
    _controller = ScrollController();
     WidgetsBinding.instance.addPostFrameCallback((_) 
  _controller
      .animateTo(_controller.position.maxScrollExtent,
          duration: Duration(seconds: 1), curve: Curves.ease)
      .then((value) async 
    await Future.delayed(Duration(seconds: 2));
    _controller.animateTo(_controller.position.minScrollExtent,
        duration: Duration(seconds: 1), curve: Curves.ease);
  );
);
  

  callMeWidget() 
    return Container(
      height: 100,
      width: 100,
      color: Colors.red,
      margin: EdgeInsets.all(10),
    );
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Container(
        child: SingleChildScrollView(
          controller: _controller,
          scrollDirection: Axis.horizontal,
          child: Row(
            children: <Widget>[
              callMeWidget(),
              callMeWidget(),
              callMeWidget(),
              callMeWidget(),
              callMeWidget(),
            ],
          ),
        ),
      ),
    );
  

【讨论】:

这确实解决了一部分问题。但是在列表到达末尾后,我想向后滚动。这应该在延迟 2 秒后发生。

以上是关于Flutter:如何自动滚动到 SingleChildScrollView 的末尾的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 自动滚动到 CaroidrlSlider

如何在 Flutter 中自动滚动 Listview.separated 中的所有 List Tiles?

在 Flutter 中如何通过页面 id 创建自动无限滚动分页?

如何在 Flutter listview streambuilder 中停止自动滚动?

如何在颤动中自动滚动文本?

输入文本时自动扩展的 Flutter 文本字段,然后在达到特定高度时开始滚动文本