Flutterでオーバースクロールでの画面更新を可能にするRefreshIndicatorの使い方

はじめに
スマートフォンのアプリでよく目にする機能の1つとして、画面を本来の長さ以上にスクロールする(オーバースクロール)と画面が更新される機能があると思います。Flutterではデフォルトでこの機能を使用することができ非常に簡単に実装することができます。この記事ではこの機能の実装手順をまとめます。
できるようになること
以下のGIF画像のように、画面でオーバースクロールすると更新中のマークが表示され、任意の処理をオーバースクロール時に実行できるようになります。ここでは、簡単な処理として、オーバースクロールされた時間を表示するようにしています。
このデモのコードは以下のGitHubにあげてあります。
前提と環境
以下の通りです。
- Flutter 1.5.4-hotfix.2
- Dart 2.3.0
RefreshIndicatorについて
このオーバースクロールで画面を更新する、または任意の処理を実行する機能は、FlutterのRefreshIndicator
というウィジェットで定義されています。RefreshIndicator
は、スクロールできる要素を含む形で実装します。公式ドキュメントではScrollable(スクローラブル)な要素と表現されており、スクローラブルな要素としてListView
やSingleSchildScrollView
が挙げられています。RefreshIndicator
はこれらの要素を包んだ状態で使います。逆に言えばRefreshIndicator
は、中にスクローラブルな要素が含まれていないと動作しません。
なお、RefreshIndicator
は別途パッケージをインストールする必要はなく、デフォルトで使用可能です。
以下がRefreshIndicator
の公式ドキュメントです。
A widget that supports the Material "swipe to refresh" idiom.
RefreshIndicatorの使い方
使い方は非常に簡単です。冒頭に載せたデモのように一番シンプルな使い方の場合、作業としては以下の2つのみです。
RefreshIndicator
でListView
などのスクローラブルな要素を包むRefreshIndicator
で包んだ要素がオーバースクロールされた時に実行する関数を定義する
上記についてそれぞれ説明します。
スクローラブルな要素をRefreshIndicatorで包む
以下のように、ListView
をRefreshIndicator
で包みます。以下でonRefresh:
というオプションがあり、これに渡された関数がオーバースクロールされた時に実行される関数になります。すなわち、以下の場合はオーバースクロール時に_onRefresh
という関数が呼び出され実行されます。
オーバースクロールされた時に実行する関数を定義する
オーバースクロールされた時に実行する関数を例えば以下のように定義します。以下では、単純に適当な変数のupdated_at
に実行時の時間を格納しています。
そしてこの記事の載せたデモでは、このupdated_at
を以下のようにそのままテキストで出力するようにしています。
スクロールできるほどの長さがない画面の対応について
もしスクロールできるほど画面が長くない場合は、AlwaysScrollableScrollPhysics()
というオプションをListView
などのスクローラブルな要素の中で指定します。このオプションを設定することで、画面の長さに関わらず常にスクロール機能が使えるようになり、同時にRefreshIndicator
も機能します。
まとめ
ここでは簡単なデモになりましたが、RefreshIndicator
を使ってスクロールされた時に最新情報を取得するなどよく見る機能を簡単に実装できます。
関連記事
- 公開日:2022/08/30 更新日:2022/08/30
FlutterアプリでAndroid StudioのGenerate Signed Bundle/APKが表示されない時の対処法
FlutterアプリをGoogle Play Storeに公開するためにAndroid Studioを使ってアップロード鍵を生成しようとしたところ、公式ドキュメントに書かれている「Build」→「Generate Signed Bundle/APK」というメニューが見つかりませんでした。この解決法をメモします。
- 公開日:2022/08/15 更新日:2022/08/15
webview_flutterを使ってFlutterアプリ内でWebページを開く
FlutterでURLをタップした時にアプリ内でそのURLのWebページを開く方法についてまとめます。この記事では、Flutter公式のプラグインであるwebview_flutterを使用した実装例をメモします。
- 公開日:2022/08/14 更新日:2022/08/14
FlutterでURLへのリンクを作成してアプリ外でWebページを開く
FlutterでURLをタップしたらブラウザが開いてそこでURL先を表示したい場合があります。この記事では、Flutter公式のプラグインを使用した実装例をメモします。
- 公開日:2019/12/03 更新日:2019/12/03
Android App Bundleを実機にインストールして試すために使うbundletoolの使い方
Flutterなどで開発したAndroidアプリを自分の手元にある実機にインストールして試したい場合はbundletoolを使用するよう公式ドキュメントに記載されています。ただ、常識であるためなのか詳しい使い方が書かれておらず戸惑ったのでメモしておきます。
- 公開日:2019/12/02 更新日:2019/12/02
Flutterでアプリの復帰やサスペンドを検出して処理を実行する
Flutterで開発したアプリが復帰した時やサスペンドした時を検出して任意の処理を実行するための手順をまとめます。
開発アプリ
