欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

flutter豎屏,flutter橫屏

Flutter 94: 初識(shí) MediaQuery

當(dāng)我們同時(shí)為手機(jī)和平板適配編寫 app 針對(duì)不同屏幕尺寸進(jìn)行 UI 布局或當(dāng)用戶偏好設(shè)置較大字號(hào)或是想要最大限度等減少動(dòng)畫等;此時(shí)就需要 MediaQuery 來幫我們獲取所用設(shè)備的信息以及用戶設(shè)置的偏好信息;

站在用戶的角度思考問題,與客戶深入溝通,找到瑪沁網(wǎng)站設(shè)計(jì)與瑪沁網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋瑪沁地區(qū)。

MediaQuery 一直存在于 WidgetsApp 和 MaterialApp 中, MediaQuery 繼承自 InheritedWidget 是一個(gè)單獨(dú)的 Widget ,但一般通過 MediaQuery.of(context) 來獲取相關(guān)信息;

當(dāng)相關(guān)信息發(fā)生變化,例如屏幕旋轉(zhuǎn)等時(shí),屏幕中 Widget 會(huì)重新構(gòu)建,以保持最新狀態(tài);我們可以通過 MediaQuery 構(gòu)造函數(shù)和提供的靜態(tài)方法手動(dòng)設(shè)置對(duì)應(yīng)的相關(guān)信息;

MediaQueryData 包含關(guān)于媒介的相關(guān)信息;一般通過 MediaQuery.of(context) 獲取;

size 為媒介的尺寸大小,以邏輯像素為單位;

devicePixelRatio 為像素密度;與設(shè)備物理像素有關(guān),與橫豎屏等無關(guān);

orientation 為橫豎屏, Orientation.landscape 為橫屏, Orientation.portrait 為豎屏;

textScaleFactor 為

每個(gè)邏輯像素的字體像素?cái)?shù),小菜理解為字體的像素比;注意,小菜設(shè)置了默認(rèn)字體像素密度為標(biāo)準(zhǔn)的 1.2 倍之后調(diào)整設(shè)備系統(tǒng)字號(hào),其 1.2 倍依舊是以標(biāo)準(zhǔn)字號(hào)為基礎(chǔ)擴(kuò)大 1.2 倍;

platformBrightness 為當(dāng)前設(shè)備的亮度模式;注意調(diào)整屏幕亮度并不會(huì)改變?cè)撃J剑c當(dāng)前系統(tǒng)支持的黑暗模式和明亮模式相關(guān);

alwaysUse24HourFormat 為當(dāng)前設(shè)備是否為 24 小時(shí)制;

accessibleNavigation 為是否使用 TalkBack 或 VoiceOver 之類的輔助功能與應(yīng)用程序進(jìn)行交互,用以輔助視力障礙人群;

invertColors 為是否使用顏色反轉(zhuǎn),主要用于 iOS 設(shè)備;

highContrast 為用戶是否要求前景與背景之間的對(duì)比度高,主要用于 iOS 設(shè)備;

disableAnimations 為平臺(tái)是否要求禁用或減少動(dòng)畫;

boldText 為平臺(tái)是否要求使用粗體;

padding 為屏幕內(nèi)邊距,一般是劉海兒屏或異形屏中被系統(tǒng)遮擋部分邊距;

viewInsets 為鍵盤彈出時(shí)等遮擋屏幕邊距,其中 viewInsets.bottom 為鍵盤高度;

systemGestureInsets 為手勢(shì)邊距,如 Android Q 之后添加的向左滑動(dòng)關(guān)閉頁面等;

viewPadding 小菜理解為視圖內(nèi)邊距,為屏幕被劉海兒屏或異形屏中被系統(tǒng)遮擋部分,從 MediaQuery 邊界的邊緣計(jì)算;此值是保持不變;例如,屏幕底部的軟件鍵盤可能會(huì)覆蓋并占用需要底部填充的相同區(qū)域,因此不會(huì)影響此值;

physicalDepth 為設(shè)備物理層級(jí),小菜暫時(shí)還未想到對(duì)應(yīng)的應(yīng)用場(chǎng)景;

小菜在嘗試獲取其他子 Widget Size 時(shí),有兩點(diǎn)需要注意,首先要設(shè)置一個(gè)全局的 GlobalKey 來獲取當(dāng)前位置, key 需要為唯一的;第二通過 GlobalKey().currentContext 獲取 BuildContext 上下文環(huán)境,從而獲取對(duì)應(yīng)尺寸;

MediaQuery 案例嘗試

小菜對(duì)于部分 MediaQueryData 的應(yīng)用和理解還不夠深入;如有錯(cuò)誤請(qǐng)多多指導(dǎo)!

Flutter實(shí)踐--屏幕適配

做移動(dòng)端開發(fā)的小伙伴都知道,針對(duì)不同型號(hào)和尺寸的手機(jī)要進(jìn)行頁面適配,且Android和iOS適配方案各不相同,那flutter端如何進(jìn)行適配呢?以下為近期flutter開發(fā)過程中關(guān)于適配的一些學(xué)習(xí)和記錄~~~~

說到flutter屏幕適配,就不得不提到插件 flutter_screenutil ,提到flutter_screenutil就不得不說以下幾點(diǎn)????

默認(rèn)寬1080px

默認(rèn)高1920px

allowFontScaling為false,即不跟隨系統(tǒng)字體大小設(shè)置變化

初始化單位為px

需要把context傳進(jìn)去,因?yàn)閮?nèi)部是通過 MediaQuery 來獲取屏幕尺寸等相關(guān)信息的

無需再傳context,因?yàn)閮?nèi)部是通過單例 window 來獲取屏幕尺寸等相關(guān)信息的

作為iOS開發(fā),之前都是以pt為參照進(jìn)行比例適配的,且架構(gòu)組已經(jīng)定義了一套適配相關(guān)常量,傳px進(jìn)去不太方便,所以需要對(duì)flutter_screenutil進(jìn)行擴(kuò)展

公司設(shè)計(jì)圖是以iPhone X的尺寸提供的即物理設(shè)備尺寸為375x812,像素比例為750x1624,像素密度比為2

初始化仍用px來初始化

dart sdk 2.7正式支持 extension-method ,即為已有類擴(kuò)展方法,從 flutter_screenutil 這種 540.w 寫法點(diǎn)進(jìn)去,我們可以看到

flutter_screenutil為num類擴(kuò)展了一系列簡(jiǎn)寫方法,那我們當(dāng)然可以按照它這種方式進(jìn)行擴(kuò)展

網(wǎng)上提供的解決方案:

第一步:修改 pubspec.yaml

第二步:執(zhí)行 flutter pub get

第三步:重啟 AndroidStudio

解決方案:去掉const即可

UI設(shè)計(jì)中px、pt、ppi、dpi、dp、sp之間的關(guān)系

Dart/Flutter - 擴(kuò)展方法(ExtensionMethod)

Flutter——pdf閱讀功能的實(shí)現(xiàn)

實(shí)現(xiàn)pdf閱讀、橫豎屏切換,以及pdf頁面的點(diǎn)擊放大和雙指放大等功能

在這個(gè)項(xiàng)目中使用的是 flutter_plugin_pdf_viewer: ^1.0.7 ,可以滿足我們最基本的pdf需求閱讀需求。所做的滿足項(xiàng)目需求的工作主要是橫豎屏切換功能,以及我們的初始化繼續(xù)閱讀等等。

首先導(dǎo)入插件部分源碼

插件所提供的示例,已經(jīng)滿足了最基本的圖片放大、橫屏閱讀的功能,我們工作的難點(diǎn)就在于pdf豎屏閱讀的實(shí)現(xiàn),所以我們需要解決的問題主要有以下幾點(diǎn):

(1) 橫屏加載同一頁面不能重復(fù)流量加載

(2) 切換豎屏?xí)r加載速度不能過慢,頁面不能有斷層

(3) 橫豎屏切換時(shí)頁碼的定位保持

針對(duì)于上述問題,我們一一進(jìn)行解決。

重復(fù)流量加載 ,解決這一問題比較簡(jiǎn)單,我們可以利用緩存實(shí)現(xiàn),在每一次加載pdf頁時(shí),存儲(chǔ)其(key,value),這樣在下一次加載時(shí)我們會(huì)判斷這個(gè)頁面在緩存中是否已經(jīng)存在,不存在重新加載,存在則調(diào)用緩存中的數(shù)據(jù),頁面銷毀時(shí)清除所有緩存即可。

切換橫豎屏 ,豎屏PDF閱讀的實(shí)現(xiàn),思路就是將所有橫屏頁面存在list中,使用LIstView.builder()進(jìn)行繪制,這種方法存在的缺點(diǎn)就是太慢了,需要將所有頁面全部加載之后,才可以繪制頁面,用戶體驗(yàn)非常差,所以我們需要做一些改進(jìn),為了提升加載速度,實(shí)現(xiàn)效果GIF中的效果,我們就要使用FutureBuilder()方法,來實(shí)現(xiàn)預(yù)加載功能,具體實(shí)現(xiàn)如下:

(在這里不對(duì)此組件過多介紹,后續(xù)會(huì)專門介紹此組件的使用),這樣我們就可以實(shí)現(xiàn)預(yù)加載的功能了。

橫豎屏切換定位 ,這個(gè)點(diǎn)的解決思路已經(jīng)在我的 (Flutter 初始化ListView定位子組件位置) 中進(jìn)行了介紹,實(shí)現(xiàn)了解決。

至此,我們就解決了所有的難點(diǎn)問題。

Flutter的Local Key和Global Key

局部key,包含三種類型的key: ValueKey 、 ObjectKey 、 UniqueKey

1、ValueKey通過ValueKey的值來對(duì)比。比如1,2,3。用在學(xué)生的id等唯一信息上。

2、ObjectKey 以O(shè)bject對(duì)象作為Key,通過指針地址來對(duì)比。new一個(gè)對(duì)象,對(duì)象的指針地址進(jìn)行對(duì)比。

3、UniqueKey唯一的,可以保證Key的唯一性。使用之后就不存在Element的復(fù)用了,因?yàn)槊看味际遣煌摹H绻麑?shí)在沒有唯一標(biāo)識(shí)了,可以使用UniqueKey來標(biāo)識(shí)。

總結(jié):ValueKey和ObjectKey設(shè)置唯一的key之后,都會(huì)保持Element的復(fù)用,Element樹會(huì)根據(jù)key來保持原先的界面內(nèi)容。而UniqueKey在熱重載之后,就會(huì)重新生成,都不同,所以界面內(nèi)容會(huì)改變。

全局key,GlobalKey可以獲取到對(duì)應(yīng)的Widget的State對(duì)象!

當(dāng)我們頁面內(nèi)容很多時(shí),而需要改變的內(nèi)容只有很少的一部分且在樹的底層的時(shí)候,我們通常情況下有兩種方式,第一種是通過方法的回調(diào),去實(shí)現(xiàn)數(shù)據(jù)更新,第二種是通過GlobalKey,在StatelessWidget引用StatefulWidget。

例如,橫豎屏的布局不同,橫屏Row豎屏Colum,界面里面的內(nèi)容在橫豎屏切換的時(shí)候不能改變,這個(gè)時(shí)候就需要是用GloableKey了,初始化幾個(gè)不同name的GloableKey,分別添加到對(duì)應(yīng)的widget中。

Flutter中屏幕適配,尺寸設(shè)置

1、 新版本Flutter SDK 引入了 extension的機(jī)制。可以對(duì)某個(gè)class 進(jìn)行擴(kuò)展。(swift中有類似機(jī)制)

2、屏幕適配一直是一個(gè)老生常談的問題,隨著機(jī)型越來越多,適配的場(chǎng)景也越來越復(fù)雜。

3、之前有了解過 微信小程序的適配方案,個(gè)人一直感覺是一個(gè)比較好的方式( iPhone6為標(biāo)準(zhǔn)尺寸)下面????將引用小程序的方案來進(jìn)行對(duì) Flutter的尺寸設(shè)置。

size_fit.dart 文件

double_extension.dart 文件

int_extension.dart 文件

通過上面的設(shè)置,在不同設(shè)備上,展示的widget的尺寸就會(huì)不一樣了。

Flutter 屏幕適配 -- 百分比

本文是根據(jù) Daniele Cambi 的文章 Flutter — Effectively scale UI according to different screen sizes 總結(jié)而來 :

文章地址 : (自備扶梯)

本文核心思想 :

作者創(chuàng)建一個(gè)矩形 :

在iPhone 5s (4" Display) and on an iPhone XS Max (6,46" Display),

顯示效果的差異 !!! 如何解決這個(gè)問題呢 ?

注: Flutter 使用的 邏輯像素 logical pixels 為單位 ,和 Android的 dp還是不一樣

具體 lp 有什么效果,網(wǎng)上也沒查到具體資料????

如何解決這個(gè)問題呢 ?

作者認(rèn)為可以把屏幕認(rèn)為是一個(gè) , 100 * 100 的格子(或者認(rèn)為水平方向和豎直方向,平均分成100個(gè)單位 ,恩 ,是不是就是Android中的百分比布局了)

作者新建一個(gè)幫助類 :

初始化方法 :

使用幫助類來設(shè)置widget大小 :

效果圖 :

在Flutter中有一個(gè)非常方便的小部件,可以有效地處理這些問題,它被稱為“安全區(qū)域”( SafeArea)。

個(gè)人理解,flutter , 把 異形屏 ,導(dǎo)航欄相關(guān)區(qū)域稱為 安全區(qū)域 。

作者的思想 :屏幕的長(zhǎng)寬去掉安全區(qū)域的大小,然后分成 100份 ,算出每一塊的單位長(zhǎng)度 。

我們可以使用 SizeConfig.safeBlockHorizontal or SizeConfig.safeBlockVertical為單位 ,對(duì)文字進(jìn)行縮放 。

真實(shí)的軟件開發(fā)過程,一般是設(shè)計(jì)人員先設(shè)計(jì)好設(shè)計(jì)圖 or 設(shè)計(jì)稿(一般是1080px * 1920px為基準(zhǔn)),然后研發(fā)人員進(jìn)行開發(fā)

那我們就把屏幕寬和長(zhǎng) ,分成 1080 和 1920 個(gè)單位 ,然后按設(shè)計(jì)圖上的標(biāo)注去填寫相應(yīng)widgets的大小

所以我認(rèn)為 flutter 非常適合百分比布局(天生適合按比例布局)

而Android 百分比布局,適配工作量非常大,兼容性差

在網(wǎng)上發(fā)現(xiàn)了一個(gè)開源庫 ,原理我覺得差不多,大家可以學(xué)習(xí)一下

flutter_screenutil

如果覺得文章有用,幫忙點(diǎn)個(gè)喜歡?? ,????????????

當(dāng)前名稱:flutter豎屏,flutter橫屏
文章源于:http://chinadenli.net/article2/dsggeoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站建站公司手機(jī)網(wǎng)站建設(shè)商城網(wǎng)站面包屑導(dǎo)航網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化