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