Flutter 使用cached_image_network優(yōu)化圖片加載體驗
在 App 中會經(jīng)常遇到需要從后臺拉取圖片的場景,這一方面會給服務(wù)器帶來網(wǎng)絡(luò)帶寬消耗,另一方面加載圖片的等待過程也會影響用戶體驗。因此,往往會在 App 端對圖片做緩存機(jī)制,以避免同一張圖片反復(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 WebView 不支持 H5 input type="file" 解決方法
這篇文章主要介紹了Android WebView 不支持 H5 input type="file" 解決方法,需要的朋友可以參考下2017-06-06
Android TextView 設(shè)置字體大小的方法
這篇文章主要介紹了Android TextView 設(shè)置字體大小的方法的相關(guān)資料,需要的朋友可以參考下2016-02-02
Android TextView前增加紅色必填項星號*的示例代碼
TextView是一個完整的文本編輯器,但是基類為不允許編輯,其子類EditText允許文本編輯,這篇文章主要介紹了Android TextView前增加紅色必填項星號*的示例代碼,需要的朋友可以參考下2024-03-03
Android Studio實現(xiàn)自定義全局懸浮按鈕的示例代碼
在 Android 應(yīng)用中實現(xiàn)全局懸浮按鈕是一個常見的需求,可以用于快速訪問重要功能或返回頂部等操作,下面我將詳細(xì)介紹如何實現(xiàn)一個自定義的全局懸浮按鈕,感興趣的小伙伴跟著小編一起來看看吧2025-04-04
Android HTTP發(fā)送請求和接收響應(yīng)的實例代碼
Android HTTP請求和接收響應(yīng)實例完整的Manifest文件如下,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-06-06
Android實現(xiàn)上拉加載更多以及下拉刷新功能(ListView)
這篇文章主要介紹了Android實現(xiàn)上拉加載更多功能以及下拉刷新功能的相關(guān)資料,需要的朋友可以參考下2016-01-01
Android編程獲取GPS數(shù)據(jù)的方法詳解
這篇文章主要介紹了Android編程獲取GPS數(shù)據(jù)的方法,結(jié)合實例形式分析了Android地理位置操作的相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2016-10-10

