flutter圖片高度,flutter 狀態(tài)欄高度

Flutter(6):基礎(chǔ)組件之Image

Image是一個(gè)用于展示圖片的組件。支持 JPEG、PNG、GIF、Animated GIF、WebP、Animated WebP、BMP 和 WBMP 等格式。

在網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷成為有效果、有回報(bào)的無錫營(yíng)銷推廣。創(chuàng)新互聯(lián)建站專業(yè)成都網(wǎng)站建設(shè)10年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

Image.asset - 用于從資源目錄的顯示圖片,需要在 pubspec.yaml 文件中聲明。

Image.network - 用于從網(wǎng)絡(luò)上顯示圖片。

Image.file - 用于從文件里顯示圖片。

Image.memory - 用于從內(nèi)存里(Uint8List)顯示圖片。

alignment → AlignmentGeometry - 圖像邊界內(nèi)對(duì)齊圖像。

centerSlice → Rect - 九片圖像的中心切片。

color → Color - 該顏色與每個(gè)圖像像素混合colorBlendMode。

colorBlendMode → BlendMode - 用于 color 與此圖像結(jié)合使用。

fit → BoxFit - 圖像在布局中分配的空間。

gaplessPlayback → bool - 當(dāng)圖像提供者發(fā)生變化時(shí),是繼續(xù)顯示舊圖像(true)還是暫時(shí)不顯示(false)。

image → ImageProvider - 要顯示的圖像。

matchTextDirection → bool - 是否在圖像的方向上繪制圖像 TextDirection。

repeat → ImageRepeat - 未充分容器時(shí),是否重復(fù)圖片。

height → double - 圖像的高度。

width → double - 圖像的寬度。

加載資源圖片需要將圖片資源放入工程中,例如:新建images文件夾,將圖片放在該文件夾下,圖片適配則是使用ios的方式1X,2X,3X:

然后在pubspec.yaml中配置assets:

加載資源/網(wǎng)絡(luò)/本地文件圖片/內(nèi)存圖片:

占位圖加載圖片:

圓形圖片:1.裁剪實(shí)現(xiàn) 2.CircleAvatar實(shí)現(xiàn) 3.Container邊框?qū)崿F(xiàn)

圓角圖片:1.裁剪實(shí)現(xiàn) 2.Container邊框?qū)崿F(xiàn)

BoxFit.contain 全圖居中顯示但不充滿,顯示原比例

BoxFit.cover 圖片可能拉伸,也可能裁剪,但是充滿容器

BoxFit.fill 全圖顯示且填充滿,圖片可能會(huì)拉伸

BoxFit.fitHeight 圖片可能拉伸,可能裁剪,高度充滿

BoxFit.fitWidth 圖片可能拉伸,可能裁剪,寬度充滿

BoxFit.scaleDown 效果和contain差不多, 但是只能縮小圖片,不能放大圖片

下一節(jié)學(xué)習(xí)基礎(chǔ)組件之Text

Flutter實(shí)現(xiàn)馬蜂窩小紅書自適應(yīng)高度輪播圖

NotificationListener 可以監(jiān)聽 PageView 的改變,比如滑動(dòng)的距離,頁(yè)面索引等,目前只使用的了索引。里面的一些方法挺有用的。

使用 AnimatedContainer 組件保證切換以后會(huì)有流程的過渡效果,表現(xiàn)的會(huì)平滑一些。

首先,返回?cái)?shù)據(jù)需要包含圖片的寬高信息,就像這樣:

如果返回的只有圖片信息沒有寬高數(shù)據(jù)可以使用以下方法去獲得圖片的信息,這樣也可以得到圖片的寬高信息,不太建議,還是直接叫后端給,我們也方便處理,要是后端說他們給不了就拿上磚頭去叫他們加,就想偷懶。

自適應(yīng)輪播圖的高度我們需要原始圖片的寬高比,或者知道原始圖的寬高。顯示的時(shí)候按照原始的寬高比進(jìn)行等比例縮放。

_controller.page 獲取到的是一個(gè)浮點(diǎn)數(shù),類似 1.0325441 ,使用 round 四舍五入出現(xiàn)的效果就是我們拖到一半或以上就可以得到下一個(gè) activeIndex , activeIndex 是一個(gè)整數(shù)。

我們動(dòng)態(tài)獲取了圖片的寬度以后放入 AnimatedContainer 就可以有過渡效果,真機(jī)和模擬器測(cè)試都很流暢,可以已60幀渲染。

Flutter MediaQuery獲取屏幕信息以及屏幕適配

Flutter中控件的高寬和字體大小時(shí),使用的是邏輯像素,并非是實(shí)際的物理像素。

flutter中的屏幕適配

假設(shè)設(shè)計(jì)圖的大小為1080 1920,上面一個(gè)圖片的高度為 80 90,則它在設(shè)備上的高寬為

對(duì)于android手機(jī),一般以寬度為基準(zhǔn)計(jì)算UI的高寬,因?yàn)閍ndroid手機(jī)的寬度一般就是750,1080等幾個(gè)尺寸,但是高的尺寸就有很多。

推薦一個(gè)別人封裝好的一個(gè)用于屏幕適配的庫(kù)

Flutter屏幕適配方案插件-完美解決屏幕適配

Flutter小部件之圖片(Image)和圖標(biāo)(Icon)

在Flutter中,我們可以使用Image控件來顯示圖片,一般來講我們的圖片資源都來源于網(wǎng)絡(luò)或者本地圖片。

Flutter中的Image也是類似。

我們先來看看Image的構(gòu)造方法

下面我們來看看其常用的屬性

可以看到,其常用屬性跟前端中的css很像。

下面我們來簡(jiǎn)單用一用Image控件

首先是必填參數(shù)image,它接收一個(gè)ImageProvider類型的值。ImageProvider是一個(gè)抽象類,他下面有下圖這些實(shí)現(xiàn)類,由下面這些實(shí)現(xiàn)類可以看出,image是可以從資源,內(nèi)存,網(wǎng)絡(luò),和文件中獲取圖片。

我們先來試試加載網(wǎng)絡(luò)圖片

首先看看NetworkImage構(gòu)造方法,很簡(jiǎn)單,傳個(gè)url就可以了

如下:

嗯,就是這么簡(jiǎn)單。其他3種情況使用也是類似的,自行看源碼即可。

實(shí)際上,F(xiàn)lutter給我們提供了擴(kuò)展方法,使用起來更加簡(jiǎn)單,通常我們直接使用提供的擴(kuò)展方法即可

如下

可以看到,他們的構(gòu)造方法基本類似。

所以我們也可以這樣寫,跟上面的效果是一致的。

大致分為一下幾步

1.創(chuàng)建一個(gè)文件夾,用于存放圖片,如圖,我創(chuàng)建了一個(gè)imgs的文件夾,放了一張圖片

2.在pubspec.yaml中聲明資源,注意聲明的時(shí)候路徑和前面的-是有間隔的,不然的話會(huì)報(bào)#/properties/flutter/properties/assets: type: wanted [array] got -imgs/code.png

類似的錯(cuò)誤,聲明完成后點(diǎn)擊右上方的packages get

下面我們?cè)賮砜纯雌渌麑傩浴?/p>

width,height

寬高沒什么好說的,就是設(shè)置寬度和高度

配合color使用,用于設(shè)置顏色的混合模式。BlendMode是一個(gè)枚舉,他有很多值

詳細(xì)解析還是看官方文檔吧,值太多了,我們隨便用用

用于設(shè)置圖片的填充方式,當(dāng)圖片本身小于設(shè)置的寬高或者比父控件的寬高小時(shí),我們可以設(shè)置該屬性控制圖片的顯示。

其值的類型是BoxFit。是個(gè)枚舉

具體含義還是直接看文檔即可

設(shè)置圖片的對(duì)齊方式,接收一個(gè)Alignment類型的值,值如下,很好理解

為了方便看效果我們?cè)谕膺吿琢藗€(gè)Container,簡(jiǎn)單的把它理解為一個(gè)容器布局就可以了,類似于html中的div或android中的Layout,我們給Container設(shè)置了寬高和背景顏色。

bottomLeft效果如下,其他的自行嘗試

相對(duì)于Image,ICON可以像web一樣使用字體圖標(biāo),并且可以使用矢量圖,無需擔(dān)心失真的問題,并且體積相對(duì)較小。

我們先來看看其構(gòu)造方法

很簡(jiǎn)單,我們直接來用一用

默認(rèn)情況下,pubspec.yaml中uses-material-design的值為true.我們默認(rèn)就可以使用Material Design字體圖標(biāo)

Flutter實(shí)戰(zhàn)巧之-showModalBottomSheet 高度自適應(yīng)

showModalBottomSheet 所彈出的內(nèi)容高度是固定的。要想自適應(yīng)自己布局的高度只需如下兩點(diǎn):

加入 isScrollControlled: true 后,彈窗高度會(huì)變成全屏的。接下來就是自己布局中的處理。

BottomPhotoDialog是我自己寫的想要彈出的布局。在根節(jié)點(diǎn)中用SingleChildScrollView來包裹Column即可讓彈窗高度適應(yīng)布局高度

flutter圖片內(nèi)存優(yōu)化

按照給定尺寸進(jìn)行圖片的解碼,而不是解碼整個(gè)圖片的尺寸,用來減少內(nèi)存的占用。

官方文檔:

官方說明:

Instructs Flutter to decode the image at the specified dimensions instead of at its native size.

This allows finer control of the size of the image in ImageCache and is generally used to reduce the memory footprint of ImageCache .

The decoded image may still be displayed at sizes other than the cached size provided here.

使用:

三方庫(kù): cached_network_image 限2.5.0之后版本才可用

設(shè)定最大的緩存寬度和高度 this.maxWidthDiskCache 、 this.maxHeightDiskCache

使用:

從相冊(cè)選取圖片,展示時(shí)使用指定尺寸寬高進(jìn)行處理。

使用三方庫(kù):

使用自定義 provider 來指定所需圖片的寬高:

AssetEntityImageProvider 傳入寬高和圖片原圖 AssetEntity 數(shù)據(jù)。

provider 中 key.entity.thumbDataWithSize 方法:

進(jìn)入 entity 中 thumbDataWithSize 方法:

進(jìn)入 _getThumbDataWithId 方法中,

進(jìn)入getThumb:

調(diào)用iOS原生的獲取圖片方法,

進(jìn)入 getThumbWithId 方法,

原生實(shí)現(xiàn)獲取置頂寬高縮略圖方法實(shí)現(xiàn):

使用 iOS 原生類 PHImageManager 的

來獲取縮略圖。

標(biāo)題名稱:flutter圖片高度,flutter 狀態(tài)欄高度
文章鏈接:http://muchs.cn/article34/phshpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、商城網(wǎng)站App開發(fā)、外貿(mào)建站、網(wǎng)站內(nèi)鏈網(wǎng)站收錄

廣告

聲明:本網(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)

h5響應(yīng)式網(wǎng)站建設(shè)