MediaQuery壹直存在於WidgetsApp和MaterialApp中。MediaQuery是繼承自InheritedWidget的壹個獨立的小部件,但它通常通過MediaQuery.of(context)獲取相關信息。
當相關信息發生變化時,比如屏幕旋轉,屏幕中的Widget會重新構建,保持最新狀態;我們可以通過MediaQuery構造函數和提供的靜態方法手動設置相應的相關信息;
MediaQueryData包含媒體的相關信息;壹般通過MediaQuery.of(context)獲取;
Size是介質的大小,以邏輯像素為單位;
DevicePixelRatio是每英寸的像素;與設備的物理像素有關,與橫豎屏無關;
方向是橫屏和豎屏,方向.橫向是橫屏,方向.縱向是豎屏;
TextScaleFactor是
每個邏輯像素在字體中的像素數理解為字體的像素比;註意,將默認字體像素每英寸設置為標準的1.2倍後,設備系統的字體大小進行了調整,其1.2倍仍然是在標準字體大小的基礎上擴大了1.2倍;
PlatformBrightness是當前設備的亮度模式;註意,調整屏幕亮度不會改變這種模式,這與目前系統支持的暗模式和亮模式有關;
AlwaysUse24HourFormat是當前設備是否為24小時制;
AccessibleNavigation是指是否使用TalkBack或VoiceOver等輔助功能與應用程序進行交互,以輔助視障人士;
InvertColors是是否使用顏色反轉,主要用於iOS設備;
HighContrast是用戶是否要求前景和背景的高對比度,主要用於iOS設備;
DisableAnimations是平臺是否要求禁用或減少動畫;
BoldText表示平臺是否需要粗體;
填充是屏幕的內邊距,壹般是劉海兒屏或異形屏被系統遮擋的部分的邊距;
Viewinserts是鍵盤彈出時的屏幕邊距,其中viewInsets.bottom是鍵盤的高度;
SystemGestureInsets是手勢邊距,比如Android Q後向左滑動關閉頁面;
ViewPadding理解為視圖的內邊距,是屏幕被劉海兒屏或異形屏遮擋的部分,從MediaQuery邊界的邊緣開始計算;該值保持不變;比如屏幕底部的軟鍵盤,可能會覆蓋和占用同樣需要底部填充的區域,所以不會影響這個值;
PhysicalDepth是設備的物理層面,暫時沒有想到對應的應用場景;
當試圖獲得其他子部件大小時,有兩點需要註意。首先,應該設置壹個GlobalKey來獲取當前位置,並且該鍵應該是唯壹的。其次,通過GlobalKey()獲取BuildContext的上下文環境。currentContext,從而獲得相應的大小;
MediaQuery案例嘗試
對壹些MediaQueryData的配菜應用和理解不夠深入;如有錯誤,請多指教!