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

Ada*_*alu 2 dart flutter flutter-layout flutter-animation

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

SingleChildScrollView(
    scrollDirection:Axis.horizontal,
    child:Row(
            children:<Widget>[
                           Widget(),
                           Widget(),
                           Widget(),
                           Widget(),
                           Widget(),  
                         ],
            ), 
    ),
Run Code Online (Sandbox Code Playgroud)

Khu*_*hal 10

我有一个更好更有效的方法:

SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      reverse: true,
      child: Row(
        children: [
          ***
        ],
      ),
    );
Run Code Online (Sandbox Code Playgroud)

就如此容易 :)

一旦添加新的小部件,它就会滚动到末尾!


Vir*_*iya 5

您可以通过以下方式使用滚动控制器来完成此操作。

 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(),
            ],
          ),
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)