[Flutter]ListViewを1番上まで自動でスクロールするには?

Flutter

どうも、ちょげ(@chogetarou)です。

ListViewを1番上までスクロールする方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

ListViewを1番上までスクロールするには、ScrollControllerを使います。

まず、ScrollControllerの変数を用意します。

ScrollController _controller = ScrollController();

次に、使用するListViewもしくはListView.builderの引数「controller」に用意した変数を指定します。

ListView(
  controller: _controller,
  children : []
),

最後に、ボタンなどでScrollControllerのanimateToメソッドを呼び出します。

onPressed: () {
  _controller.animateTo(
    0,//スクロールする位置を1番上に設定
    duration: /*スクロールする時間*/,
    curve: /*スクロールの仕方*/,
  );
}

指定する引数は3つあります。

  • offset : スクロールする位置を指定。1番上にする場合は「0」を設定する
  • duration : スクロールの時間を指定。指定にはDurationを使う
  • curve : スクロールの仕方をCurvesで指定。基本的には「Curves.linear」

これらの引数を設定した「animateTo」を呼び出せば、ListViewを1番下までスクロールすることが出来ます。

以下は、使用例です。

  ScrollController _controller = ScrollController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: ListView.builder(
          controller: _controller,
          itemCount: 50,
          itemBuilder: (context, index) {
            return Padding(
              padding: const EdgeInsets.all(1.0),
              child: Container(
                color: Colors.lightGreen,
                child: Text(
                  '$index',
                  style: TextStyle(
                    color: Colors.white,
                  ),
                ),
              ),
            );
          },
          itemExtent: 50,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _controller.animateTo(
            0,
            duration: Duration(seconds: 1),
            curve: Curves.linear,
          );
        },
      ),
    );
  }

まとめ

ListViewを1番上までスクロールするには、ScrollControllerとそのメソッド「animateTo」を使います。

コメント

タイトルとURLをコピーしました