どうも、ちょげ(@chogetarou)です。
○日からX日までのように、日付を範囲で選択するにはどうしたらいいのでしょうか?
方法

日付を範囲選択できるようにするには、「DateRangePicker」を使います。
「 DateRangePicker」は、次の手順で使います。
- 選択した日付の範囲を保持する変数を用意
- 「DateRangePicker」を表示し、選択された範囲を変数に格納する関数を用意
- トリガーに用意した関数を指定
Step1
まず、選択した日付の範囲を保持するための変数を用意します。
DateTimeRange? selectedDateRange;
変数の型には、「DateTimeRange?」型を指定します。
Step2
次に、「DateRangePicker」を表示し、選択された範囲を最初に用意した変数(ここでは「selectedDateRange変数」)に格納する関数を用意します。
Future _pickDateRange(BuildContext context) async {
final initialDateRange = DateTimeRange(
start: DateTime.now(),
end: DateTime.now().add(Duration(hours: 24 * 3)));
//DateRangePickerを表示する
final newDateRange = await showDateRangePicker(
context: context,
initialDateRange: initialDateRange,
firstDate: DateTime(DateTime.now().year - 3),
lastDate: DateTime(DateTime.now().year + 3));
//nullチェック
if (newDateRange != null) {
//用意した変数に格納
setState(() => selectedDateRange = newDateRange);
} else {
return;
}
}
「DateRangePicker」は、「showDateRnagePicker関数」で表示します。
この関数は、「DateRangePicker」が表示し、範囲を選択した後に「DateTimeRange」型の値を返します。
final newDateRange = await showDateRangePicker(
context: context,
initialDateRange: initialDateRange,
firstDate: DateTime(DateTime.now().year - 3),
lastDate: DateTime(DateTime.now().year + 3));
そして、選択し終わった後には、選択された日付の範囲を用意した変数に格納します。
//nullチェック
if (newDateRange != null) {
//用意した変数に格納
setState(() => selectedDateRange = newDateRange);
} else {
return;
}
Step3
ElevatedButton(
onPressed: () => _pickDateRange(context),
child: const Text("Pick DateRange"))
ここでは、ボタンを使っていますが、他のトリガーでも同じように設定することが出来ます。
コメント