どうも、ちょげ(@chogetarou)です。
Flutterで、ユーザーが日付を選択できるようにする方法を紹介します。
方法

日付を選択できるようにするには、「DatePicker」を使います。
この「DatePicker」は、次の流れで使います。
- 選択した日付を持たせる変数を用意
- DatePickerを表示する関数を用意
- ボタンのタップやスワイプなどのトリガーに関数を指定
Step.1
まず、選択した日付を格納する変数を用意します。
DateTime? selectedDate;
変数は、「DateTime?」型にします。
Step.2
次に、「DatePicker」を表示する関数を用意します。
Future _pickDate(BuildContext context) async {
//DatePickerの初期値
final initialDate = DateTime.now();
//DatePickerを表示し、選択されたら変数に格納する
final newDate = await showDatePicker(
context: context,
//初期値を設定
initialDate: initialDate,
//選択できる日付の上限
firstDate: DateTime(DateTime.now().year - 2),
lastDate: DateTime(DateTime.now().year + 2));
//nullチェック
if (newDate != null) {
//選択された日付を変数に格納
setState(() => selectedDate = newDate);
} else {
//nullならば何もしない
return;
}
}
「showDatePicker関数」を呼び出すと、ピッカーが表示されます。
このピッカーで選択し終わる、関数の処理が再開されます。
選択し終わった後は、日付を保持するための変数に、選択した日付を代入します。
Step.3
最後に、ボタンのタップやスワイプなどに、用意した関数を指定します。
ElevatedButton(
onPressed: () => _pickDate(context),
child: const Text("Pick Date"))
ボタン以外でも同じように使うことが出来ます。
全体のコード
class Sample extends StatefulWidget {
Sample({Key? key}) : super(key: key);
@override
_SampleState createState() => _SampleState();
}
class _SampleState extends State<Sample> {
DateTime? selectedDate;
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(selectedDate != null ? selectedDate.toString() : "Date"),
SizedBox(
height: 20,
),
ElevatedButton(
onPressed: () => _pickDate(context),
child: const Text("Pick Date"))
],
),
);
}
Future _pickDate(BuildContext context) async {
//DatePickerの初期値
final initialDate = DateTime.now();
//DatePickerを表示し、選択されたら変数に格納する
final newDate = await showDatePicker(
context: context,
//初期値を設定
initialDate: initialDate,
//選択できる日付の上限
firstDate: DateTime(DateTime.now().year - 2),
lastDate: DateTime(DateTime.now().year + 2));
//nullチェック
if (newDate != null) {
//選択された日付を変数に格納
setState(() => selectedDate = newDate);
} else {
//nullならば何もしない
return;
}
}
}
コメント