來吧!Flutter(12) — DatePicker, DateRangePicker, TimePicker
在前幾個禮拜 Flutter 釋出了 1.20 版,其中包含了 DatePicker 以及 TimePicker 的優化。今天我將介紹,如何使用這兩種 Picker 以及 DateRangePicker。
這三種 Picker 都是被包裝成 Dialog 的形式,只要呼叫相對應的函數,就可以把 Picker 呼叫出來了。
DatePicker
呼叫 showDatePicker(),即可開啟 DatePicker。
建構子中,有四個引數被標記為 @requied,嘗試建立一個 showDatePicker 。
使用 showDatePicker 來建立 DatePicker
- 在上面的例子中,我們代入了 BuildContext,initialDate,firstDate 以及 lastDate
- BuildContext:用來傳給 showDialog ,讓 Flutter 顯示 Dialog ,另外還有許多參數是直接使用全域變數,Ex:
final Orientation orientation = MediaQuery.of(context).orientation;
final ThemeData theme = Theme.of(context)
… - initialDate:在開啟 DatePickerDialog 時,第一個被選到的日期。使用
DateTime.now()
取得今天日期。 - firstDate:日期顯示的第一個月份,用
DateTime(2020, 01)
設定 2020年1月 為日期的第一個月份。 - lastDate:日期顯示的最後一個月份,用
DateTime(2100, 12)
設定 2100年12月 為日期的最後一個月份。
要如何取得設定的日期資料呢?
由 showDatePicker()
回傳的值,我們可以發現,回傳的是 Future<DateTime>
。什麼是 Future<DataTime>
呢?
Future<T>
表示是回傳非同步的值,在 showDatePicker 這個例子中,因為需要等到 DatePicker 結束之後,才能得到結果。 <T>
中的T表示泛型,也就是所有類型都可以接收,這邊是使用 DateTime。
那麼,要如何才能取得 Future<DateTime>
呢? 我們可以利用 async
與 await
關鍵字來取得 DateTime 的值。如下:
- 在 onPressed: ( ) 後方的匿名函數加上 async 關鍵字 。
- 在 showDatePicker() 函式前方加上 await 關鍵字。
如此表示,onPressed( ): 會呼叫一個非同步的函式,其中需要等待結果的函式是 showDatePicker 。
按下 OK 之後,就可以取得 DateTime 資料。
DateRangePicker
- 前面介紹可以用
DatePicker
單選一個日期,Flutter 另外提供了DateRangePicker
來選擇一個日期區間。 - 如同 DatePicker,Flutter 也提供了
showDateRangePicker()
函式來開啟 DateRangePicker,下面為 showDateRangePicker() 的內容
- 由上方的函式可得知,使用 showDateRangePicker 只需要三個必要的引數:BuildCotext context,DateTime firstDate,DateTime lastDate。
- 這三個引數的用途與 DatePicker 相同,這邊不在覆述。
使用 showDateRangePicker 來建立 DateRangePicker
- 同樣地,DateRangePicker 的結果也是由
Future<T>
包起來,表示跟 DatePicker 一樣,都是非同步的。不過跟 DatePicker 不同,DateRangePicker 的結果是Future<DateTimeRange>
。 - 在 DateTimeRange 中,有兩個參數,一個是 DateTime start,另一個則是 DateTime end。在 DateRangePicker 結束之後,我們便可以使用 DateTimeRang 的 start 與 end。
TimePicker
- 介紹完兩個選擇日期的選擇器,最後要介紹的是選擇時間的
TimePicker
。 - 如同前面兩個有提供 showXXX() 函式,TimePicker 也一樣有一個 showTimePicker()
- 在 showTimePicker 函式中,有兩個被標記
@required
的引數,一為BuildContext context,另一為 TimeOfDay initialTime。 - BuildContext context 的功能與前面相同。
- TimeOfDay initialTime 則是包含時間的日期。
使用 showTimePicker 來建立 TimePicker
- TimePicker 的結果是 TimeOfDay,在 TimeOfDay 中我們可以使用 hour 取得 小時的值,使用 minute 取得分鐘的值。
小記
在 Flutter 中,利用showXXX() 可以輕易的呼叫出 DatePicker、DateRangePicker、TimePicker,且這些 Picker 都以 Material 設計,可謂是又方便又美觀呢。
如果本篇文章有幫助到你,拍手支持我吧。
謝謝
參考
Flutter.dev: showDatePicker
Flutter.dev: showDateRangePicker
Flutter.dev: showTimePicker