2、Flutter Tips - MediaQuery;

Melrose發表於2019-04-12

MediaQuery

  MediaQuery可以建立媒體查詢解析給定的子樹。

  例如,要了解當前媒體的大小(例如,包含您的應用程式的視窗),您可以從MediaQuery.ofMediaQuery.of(context).size返回的ediaQueryData中讀取MediaQueryData.size屬性。

  使用MediaQuery.of查詢當前媒體將導致您的視窗小部件在MediaQueryData更改時自動重建(例如,如果使用者旋轉其裝置)。

  如果MediaQuery沒有在範圍內,則MediaQuery.of方法將丟擲異常,除非將nullOk引數設定為true,在這種情況下它返回null

構造方法

const MediaQuery({Key key, @required MediaQueryData data, @required Widget child })
複製程式碼

  常量建構函式:建立一個向其子Widget提供MediaQueryData的視窗小部件。

factory MediaQuery.removePadding({Key key, @required BuildContext context, bool removeLeft: false, bool removeTop: false, bool removeRight: false, bool removeBottom: false, @required Widget child })
複製程式碼

  工廠建構函式:建立一個新的MediaQuery,它繼承自給定上下文的環境MediaQuery,但刪除指定的填充。

factory MediaQuery.removeViewInsets({Key key, @required BuildContext context, bool removeLeft: false, bool removeTop: false, bool removeRight: false, bool removeBottom: false, @required Widget child })
複製程式碼

  工廠建構函式:建立從給定上下文繼承環境MediaQuery的新MediaQuery,但刪除指定的檢視insets

靜態方法

static MediaQueryData of(BuildContext context, { bool nullOk = false })
複製程式碼

  給定的上下文的最近例項的資料。 可以使用此功能查詢螢幕方向的大小。當該資訊發生變化時,小部件將被安排重建,使小部件保持最新狀態。

MediaQueryData media = MediaQuery.of(context);
複製程式碼

MediaQueryData

  關於一個媒體(例如,window)的資訊。例如,MediaQueryData.size屬性包含當前視窗的寬度和高度。

  要獲取給定BuildContext的當前MediaQueryData,使用MediaQuery.of函式。例如,要獲取當前視窗的大小,請使用MediaQuery.of(context).size

  MediaQueryData包含兩個EdgeInsets值:paddingviewInsets。這些值反映了裝置的配置,並被許多頂級小部件使用,如SafeAreaCupertinoMaterial scaffold小部件。填充值定義可能不完全可見的區域,例如iPhone X上的顯示“凹口”。viewInsets值定義根本不可見的區域,通常是因為它們被裝置的鍵盤遮擋。

  viewInsetspadding值是獨立的,它們都是從MediaQuery小部件的邊界測量的。 WidgetsApp建立的頂級MediaQuery的邊界與包含該應用程式的視窗相同。

構造方法

MediaQueryData.fromWindow(ui.Window window);
複製程式碼

  基於給定視窗為媒體查詢建立資料

屬性

  • Size size :邏輯畫素中的媒體大小(例如,螢幕的大小)。
  • double devicePixelRatio :每個邏輯畫素的裝置畫素數。 這個數字可能不是兩個人的權力。 實際上,它甚至可能不是整數。 例如,Nexus 6的裝置畫素比為3.5。
  • double textScaleFactor:每個邏輯畫素的字型畫素數。
  • EdgeInsets viewInsets:應用程式可以呈現的顯示矩形每一側的物理畫素數,但作業系統可能會放置系統UI,例如鍵盤,完全遮蓋任何內容。
  • EdgeInsets padding:應用程式可以呈現的顯示矩形每一側的物理畫素數,但可能被系統UI(例如系統通知區域)部分遮擋,或者顯示器中的物理入侵(例如電視上的過掃描區域) 螢幕或手機感測器外殼)。如果你使用了這個填充(例如,通過構建一個小部件來封裝或在其佈局中考慮這個填充,以便子節點不再暴露給這個填充),你應該通過插入為小部件樹中的後續後代刪除這個填充 使用MediaQuery.removePadding工廠的新MediaQuery小部件。
  • bool alwaysUse24HourFormat:格式化時間時是否使用24小時格式。 此標誌的行為在不同平臺上有所不同: 在Android上,此標誌直接從名為“使用24小時格式”的使用者設定報告。 它適用於應用程式使用的任何語言環境,無論是系統範圍的語言環境還是應用程式設定的自定義語言環境。 - 在iOS上,當設定了名為“24小時時間”的使用者設定或系統範圍的語言環境預設使用24小時時,此標誌設定為true格式。
  • bool accessibleNavigation:使用者是否使用TalkBack或VoiceOver等輔助功能服務與應用程式進行互動。如果此設定為true,則應禁用超時等功能或增加最小持續時間。
  • bool invertColors:裝置是否反轉平臺的顏色。此標誌目前僅在iOS裝置上更新。
  • bool disableAnimations:平臺是否要求儘可能禁用或減少動畫。