圖片加載過程是由ImageProvider觸發(fā)的。而ImageProvider表示異步獲取圖片數(shù)據(jù)的操作,可以從資源,網(wǎng)絡(luò),文件等不同的渠道獲取。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)當涂,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
首先,ImageProvider根據(jù)_ImageState中傳遞的圖片配置生成對應(yīng)的圖片緩存key,然后去ImageCache中查找是否由對應(yīng)的圖片緩存,如果有,通知刷新對應(yīng)的UI;如果沒有通過ImageStream異步加載,加載完成后更新緩存,然后通知_ImageState刷新UI。
ImageCache采用的是LRU(Least Recently Used)
這個小例子使用的是豆瓣 API 中?正在上映的電影?的開放接口,要實現(xiàn)的主要效果如下:
JSON 數(shù)據(jù)結(jié)構(gòu)
一. flutter中我們想加載本地圖片,需要兩步:
二. flutter項目中本地圖片加載的原理
在加載圖片時,系統(tǒng)自動會根據(jù)屏幕分辨率優(yōu)先選擇到符合自己分配率的文件夾(2.0x或者3.0x或者4.0x)下去取相對應(yīng)的圖片,如果當前文件夾下沒有,則會到低一倍的文件夾下去,如果還沒有,則繼續(xù)向更低一倍去取。(比如:iOS 5.5英寸及以上屏幕會優(yōu)先選擇去3.0x下去取圖片,如果3.0x不存在或者3.0x文件夾下沒有,則去2.0x下取;如果2.0x不存在或者2.0x下沒有,則去1.0x下?。?.0x下再沒有,則在images文件下取)。
1.說明:
我們都知道在使用 Android 原生開發(fā) app 的時候不同分辨率的圖片放置到下面對應(yīng)的文件夾中:
但是使用 Flutter 開發(fā) app 時卻有不同,他們也有一個對應(yīng)的關(guān)系,按照他們的對應(yīng)關(guān)系建立文件夾就可以了,如下:
2.使用:
首先在 Flutter 項目根目錄中創(chuàng)建一個 images 文件夾用來存放圖片資源;
然后在項目目錄下找到 pubspec.yaml 文件打開,聲明圖片資源;
如何加載不同分辨率的圖呢,例如 android 中的 hdpi,xhdpi,xxhdpi 和 ios 中的 1x,2x,3x。只需要在 images 文件夾中在創(chuàng)建兩個 2.0x,3.0x 文件夾用來存放 2x,3x 的圖片資源:
如上圖,1.0x 圖片放到了 account 文件夾中,account 文件夾下又有 1.5x、2.0x、3.0x、4.0x 文件夾,分別存放對應(yīng)分辨率的圖片,這里要注意文件夾的對應(yīng)關(guān)系。
使用圖片時,只需要使用 account 文件夾下的圖片就行了,系統(tǒng)會根據(jù)手機的分辨率,加載對應(yīng)文件夾中的圖片,如:
開發(fā)過程工我們會用webview顯示一些活動或是變動比較頻繁的頁面,若是webview中包含圖片,一般會有保存圖片的需求,我們可以采用js交互的形式獲取圖片的url,話不多說直接看操作
獲取點擊位置的element,中的src值,即可
補充問題
1、在安卓設(shè)備上發(fā)現(xiàn)長按手勢并沒有調(diào)用,翻看 webview_flutter 發(fā)現(xiàn)需要設(shè)置安卓的類型,展示webview之前設(shè)置
2、獲取到的url也就是開始返回的value值,安卓會帶有”“,需要自行去掉