Flutter 使用cached_image_network優(yōu)化圖片加載體驗(yàn)
在 App 中會(huì)經(jīng)常遇到需要從后臺(tái)拉取圖片的場(chǎng)景,這一方面會(huì)給服務(wù)器帶來(lái)網(wǎng)絡(luò)帶寬消耗,另一方面加載圖片的等待過(guò)程也會(huì)影響用戶體驗(yàn)。因此,往往會(huì)在 App 端對(duì)圖片做緩存機(jī)制,以避免同一張圖片反復(fù)發(fā)起請(qǐng)求。這個(gè)時(shí)候cached_image_network就派上用場(chǎng)了
上一篇Flutter 給列表增加下拉刷新和上滑加載更多功能,我們使用了列表,其中列表中有從網(wǎng)絡(luò)下載圖片。直接使用 Flutter 自帶的 Image.network 下載圖片一是無(wú)法緩存,二是體驗(yàn)不夠好。熟悉 iOS 的肯定知道 SDWebImage,即 Objective-C 上用得最廣泛的圖片緩存開(kāi)源組件。與 SDWebImage 類似,F(xiàn)lutter 的 cached_image_network 插件也實(shí)現(xiàn)了這樣的功能。cached_image_network 使用十分簡(jiǎn)單,首先在 pubspec.yaml 中添加依賴:
dependencies: flutter: sdk: flutter # ...其他依賴 cached_network_image: ^3.0.0
之后在需要使用 cached_image_network 的地方引入源碼:
import 'package:cached_network_image/cached_network_image.dart';
最后在需要加載網(wǎng)絡(luò)圖片的地方使用cached_image_network 替代原有的圖片加載方式(如 Image.network):
CachedNetworkImage(imageUrl: "http://via.placeholder.com/350x150"),
以上是 cached_image_network 最簡(jiǎn)單的用法,當(dāng)然為了用戶體驗(yàn)更好,推薦是使用占位圖或加載指示器的方式提示用戶圖片正在加載。
使用占位圖
CachedNetworkImage 提供了占位圖和加載失敗后的錯(cuò)誤指示的方法用于靜態(tài)指示。我們分別準(zhǔn)備 image-default.png 和 image-failed.png 文件表示默認(rèn)占位圖和加載失敗后的占位圖,然后用 CachedNetworkImage 構(gòu)造方法的 placeholder 和 errorWidget 來(lái)使用占位圖,如下所示:
Widget _imageWrapper(String imageUrl) { return SizedBox( width: 150, height: ITEM_HEIGHT, child: CachedNetworkImage( imageUrl: imageUrl, placeholder: (context, url) => Image.asset('images/image-default.png'), errorWidget: (context, url, error) => Image.asset('images/image-failed.png'), ), ); } }
使用進(jìn)度加載指示
也可以使用進(jìn)度加載指示器來(lái)指示加載進(jìn)度,加載進(jìn)度指示支持原型進(jìn)度和線型進(jìn)度。這種對(duì)于大圖預(yù)覽時(shí)會(huì)更為常用,代碼如下所示,其中LinearProgressIndicator是線型指示器,CircularProgressIndicator 是圓形指示器:
Widget _imageWrapper(String imageUrl) { return SizedBox( width: 150, height: ITEM_HEIGHT, child: CachedNetworkImage( imageUrl: imageUrl, progressIndicatorBuilder: (context, url, downloadProgress) => LinearProgressIndicator(value: downloadProgress.progress), errorWidget: (context, url, error) => Image.asset('images/image-failed.png'), ), ); }
效果
效果如下圖所示,下拉刷新后,可以先看到占位圖,然后逐漸過(guò)渡到加載成功的圖片。如果修改鏈接為一個(gè)非法鏈接或資源不存在的鏈接,則會(huì)顯示圖片加載失敗的占位圖。這種體驗(yàn)相比空白沒(méi)有任何指示的 Image.network好很多。
以上就是Flutter 使用cached_image_network優(yōu)化圖片加載體驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于Flutter 用cached_image_network優(yōu)化圖片加載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android RecycleView實(shí)現(xiàn)多級(jí)樹(shù)形列表
這篇文章主要為大家詳細(xì)介紹了android RecycleView實(shí)現(xiàn)多級(jí)樹(shù)形列表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05Android基礎(chǔ)之使用Fragment控制切換多個(gè)頁(yè)面
Android官方已經(jīng)提供了Fragment的各種使用的Demo例子,在我們SDK下面的API Demo里面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看API Demo那個(gè)程序就可以了,不用到處去找。里面分開(kāi)不同功能,實(shí)現(xiàn)了不同的類2013-07-07Android大作業(yè)功能設(shè)計(jì)之自動(dòng)登錄和記住密碼
SharedPreferences是Android平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,主要是保存一些常用的配置參數(shù),它是采用xml文件存放數(shù)據(jù)的,文件存放在"/data/data<package?name>/shared_prefs"目錄下,由于SharedPreferences是一個(gè)接口,而且在這個(gè)接口里沒(méi)有提供寫入數(shù)據(jù)和讀取數(shù)據(jù)的能力2023-01-01android教你打造獨(dú)一無(wú)二的上拉下拉刷新加載框架
本篇文章主要介紹了android教你打造獨(dú)一無(wú)二的下拉刷新加載框架,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03Android開(kāi)發(fā)之開(kāi)發(fā)者頭條(二)實(shí)現(xiàn)左滑菜單
本文給大家介紹Android開(kāi)發(fā)之開(kāi)發(fā)者頭條(二)實(shí)現(xiàn)左滑菜單,主要用android自帶的DrawerLayout控件實(shí)現(xiàn)的此功能,具體實(shí)現(xiàn)過(guò)程請(qǐng)參考下本文2016-04-04Android中應(yīng)用多進(jìn)程的整理總結(jié)
Android平臺(tái)支持多進(jìn)程通信,也支持應(yīng)用內(nèi)實(shí)現(xiàn)多進(jìn)程,下面這篇文章主要給大家介紹了關(guān)于Android中應(yīng)用多進(jìn)程的相關(guān)資料,文中介紹的很詳細(xì),相信對(duì)大家具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-01-01Android編譯出現(xiàn)Warning:Mapping?new?ns?to?old?ns報(bào)錯(cuò)的解決方案
android在編譯的過(guò)程中難免會(huì)出現(xiàn)些錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于Android編譯出現(xiàn)Warning:Mapping?new?ns?to?old?ns報(bào)錯(cuò)的解決方案,需要的朋友可以參考下2023-02-02Android仿QQ好友列表分組實(shí)現(xiàn)增刪改及持久化
這篇文章主要介紹了Android仿QQ好友列表分組實(shí)現(xiàn)增刪改及持久化的相關(guān)資料,需要的朋友可以參考下2016-01-01android studio開(kāi)發(fā)實(shí)現(xiàn)APP開(kāi)機(jī)自啟動(dòng)
這篇文章主要為大家詳細(xì)介紹了android studio開(kāi)發(fā)實(shí)現(xiàn)APP開(kāi)機(jī)自啟動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Android 開(kāi)發(fā)手機(jī)(三星)拍照應(yīng)用照片旋轉(zhuǎn)問(wèn)題解決辦法
這篇文章主要介紹了Android 開(kāi)發(fā)手機(jī)(三星)拍照應(yīng)用照片旋轉(zhuǎn)問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-04-04