Flutterで日付と時間を同時選択させるためのDatetime Pickerを使う手順
Photo by Djim Loic on Unsplash
はじめに
スマートフォンのアプリでよく日付や時間を選択するような場合があると思います。この記事では、Flutterで日付と時間の両方を同時にユーザに選択するためのDatetime Pickerの実装手順について簡単にまとめます。なお、もし時間の指定は不要で日付のみの選択が必要な場合は、Flutterにデフォルトで用意されているshowDatePicker
をそのまま使用するのが良いです。また、showDatePicker
に加えてshowTimePicker
が公式で用意されているので、こちらを組み合わせれば日時の選択をさせるためのUIを作成できますが、この記事では何かしらの理由で日付と時間の選択をユーザに同時にさせたい場合を想定しています。
できるようになること
以下のGIF画像のように、ボタンをタップすることで日時を選択できるDatetime Pickerを表示します。
このデモのコードは以下のGitHubにあげてあります。
前提と環境
以下の通りです。
- Flutter 1.5.4-hotfix.2
- Dart 2.3.0
使用するパッケージについて
Flutterでは、日付を選択するためのshowDatePicker
と時間を選択させるためのshowTimePicker
がそれぞれ公式で用意されていますが、調べたところ2019年5月時点では日付と時間を同時に選択させるような公式パッケージはないようです。しかしいくつか代わりのパッケージが公開されています。ここではその内の1つであるflutter_datetime_picker
を使用します。以下がこのパッケージの公式ページになります。
A flutter date time picker inspired by flutter-cupertino-date-picker
また、日付のフォーマットを指定するためにintl
というパッケージも使用します。
This package provides internationalization and localization facilities, including message translation, plurals and genders, date/number formatting and parsing, and bidirectional text.
flutter_datetime_pickerとintlをインストールする
以下のようにpubspec.yaml
に追記して保存します。
dependencies:
flutter:
sdk: flutter
flutter_datetime_picker: ^1.2.1 # これを追記して保存
intl: ^0.15.8 # これを追記して保存
また、main.dart
などでimportします。
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:intl/intl.dart';
以上でDatetime Pickerを使うための準備は完了です。
Datetime Pickerを使用する
使い方はとても簡単で、例えばボタンのクリックでDatetime Pickerを呼び出したい場合は以下のようにonPressed
にDatetime Pickerを渡します。
以下のコードは冒頭に載せたデモと同じ動作をするものです。なお、コードの大半はFlutterのプロジェクト作成時に生成されるコードそのものです。
// コード全体はGitHub参照
(...以上省略...)
class _MyHomePageState extends State {
// 選択した日時を格納する変数
var _mydatetime = new DateTime.now();
// 日時を指定したフォーマットで指定するためのフォーマッター
var formatter = new DateFormat('yyyy/MM/dd(E) HH:mm');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'あなたが選択した日時は以下です: ',
),
Text(
// フォーマッターを使用して指定したフォーマットで日時を表示
// format()に渡すのはDate型の値で、String型で返される
formatter.format(_mydatetime),
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
DatePicker.showDateTimePicker(
context,
showTitleActions: true,
// onChanged内の処理はDatepickerの選択に応じて毎回呼び出される
onChanged: (date) {
// print('change $date');
},
// onConfirm内の処理はDatepickerで選択完了後に呼び出される
onConfirm: (date) {
setState(() {
_mydatetime = date;
});
},
// Datepickerのデフォルトで表示する日時
currentTime: DateTime.now(),
// localによって色々な言語に対応
// locale: LocaleType.en
);
},
tooltip: 'Datetime',
child: Icon(Icons.access_time),
),
);
}
}
上記のコードを見てわかるとおり、DatePicker:showDateTimePicker
でDatetime Pickerを生成しています。もし時間指定は不要で日付のみ指定するDate Pickerが必要な場合は、以下のようにshowDatePicker
とします。
// コード全体はGitHub参照
(...以上省略...)
onPressed: () {
DatePicker.showDatePicker(
context,
showTitleActions: true,
// onChanged内の処理はDatepickerの選択に応じて毎回呼び出される
onChanged: (date) {
// print('change $date');
},
// onConfirm内の処理はDatepickerで選択完了後に呼び出される
onConfirm: (date) {
setState(() {
_mydatetime = date;
});
},
// Datepickerのデフォルトで表示する日時
currentTime: DateTime.now(),
// localによって色々な言語に対応
// locale: LocaleType.en
);
},
(...以下省略...)
なお、冒頭でも説明したように、もし時間の選択は不要な場合は、公式のshowDatePicker
が用意されています。
ロケールで日本語を選択した場合
ロケールの設定で日本語の指定も可能です。
locale: LocaleType.jp
ただし、見た目は以下の様になります。月だけが漢字となり少々違和感があるかもしれません。
まとめ
日付と時間の選択を同時に行わせたい場合には便利です。
関連記事
- 公開日: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で開発したアプリが復帰した時やサスペンドした時を検出して任意の処理を実行するための手順をまとめます。