どうも、ちょげ(@chogetarou)です。
SingleChildScrollViewを一番上までスクロールする方法を紹介します。
方法

SingleChildScrollViewを一番上までスクロールするには、ScrollControllerを使います。
まず、ScrollControllerを用意します。
final _controller = ScrollController();
次に、SingleChildScrollViewの引数「controller」に用意したScrollControllerを指定します。
SingleChildScrollView(
controller: _controller,
・・・
),
そして、1番下までスクロールするタイミングで、ScrollControllerのanimateToメソッドを呼び出します。
animateToメソッドの第1引数に「0」、第2引数「duration」にスクロール時間(Durationクラス)、第3引数「curve」にCuvesの値を指定します。
_controller.animateTo(
0,
duration: Duration(・・・), //Durationでスクロール時間を指定
curve: Curves.〇〇, //Curvesの値
);
上記のanimateToメソッドが呼び出されると、SingleChildScrollViewが一番上までスクロールします。
使用例
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _controller = ScrollController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 300,
height: 200,
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
Text(
'This is Header.',
style: TextStyle(
fontSize: 24,
),
),
for (var i = 0; i < 20; i++)
Container(
height: 30,
color: i.isEven ? Colors.green : Colors.yellow,
),
],
),
),
),
ElevatedButton(
onPressed: () {
_controller.animateTo(
0,
duration: Duration(seconds: 1),
curve: Curves.bounceInOut,
);
},
child: Text("Scroll To Top"))
],
),
),
);
}
}
コメント