Flutter:カウントダウンタイマーの時間を設定するWidget(CupertinoTimerPicker)を使ってみる

Keisuke Kawajiri
Learn about Flutter
4 min readFeb 26, 2020

カウントダウンタイマーの時間を設定するために、時分秒を選択するスピナーがないか探してみたところ、CupertinoTimerPickerというWidgetを見つけました。
そして、学習用に作成したカウントダウンタイマーに組み込んでみました。また、せっかくなので時間設定のダイアログをMaterialからCupertino系のWidgetに変更してみました。
以下、実装方法について紹介します。

こちらの記事でMaterialのダイアログの実装方法について紹介しています。今回の実装は、次の対応関係で変更しています。

変更前       → 変更後
TextField → CupertinoTimerPicker
AlertDialog → CupertinoActionSheet
FlatButton → CupertinoActionSheetAction
showDialog → showCupertinoModalPopup

ソースコードは下記の通りです。

以下、今回利用したCupertino系のWidget、メソッド説明します。

CupertinoTimerPicker

上図のWidgetがCupertinoTimerPickerです。
フリック操作で、スピナーから任意の時/分/秒を選択できるWidgetです。
インスタンス化時に必須のプロパティは次の通りです。

  • onTimerDurationChanged
    スピナーの値に変更があった場合に、実行される処理です。引数には、スピナーで選択している値がDuration型で渡ってきます。
    今回は、スピナーの値を保持する処理をしています。
    これは、ダイアログを閉じるときにスピナーの値を呼び出し元画面に渡したいためです。

他のプロパティの説明は省略しますが、スピナーで設定する時間を分/秒に変更できたり、スピナーの刻み幅を変更(例えば2秒刻みなど)とできたりします。

CupertinoActionSheet

CupertinoActionSheetのプロパティとレイアウトの関係は上図の通りです。
今回は次のように各プロパティを設定しました。

  • title
    Textでtitle部に表示する文字列を設定しています。
  • message
    上述したCupertinoTimerPickerを設定しています。
  • actions
    OKボタンを設定しています。
    ボタンはCupertinoActionSheet用のCupertinoActionSheetActionを利用しています。
    そして、ボタン押下(onPressed)時に呼び出し元画面にCupertinoTimerPickerで設定した時間を返す処理を実装しています。
  • cancelButton
    CANCELボタンを設定しています。
    CANCELボタンもCupertinoActionSheetActionを利用しています。
    そして、ボタン押下(onPressed)時にダイアログを閉じる処理を実装しています。

showCupertinoModalPopup

ダイアログの表示にあたっては、showCupertinoModalPopupを利用しました。
これを利用すると、ポップアップが画面の下からスライドアップして表示されます。

今回は、CupertinoTimerPickerの使い方について紹介しました。
タイマーを設定するための使いやすいUIはないものかとFlutter Galleryを覗いてみたところCupertinoTimerPickerに出会いました。
Flutter Galleryを参照してみるといいかもしれません。

--

--