【Flutter 2-6】Flutter手把手教程UI布局和Widget——Image控件、NetworkImage、AssetImage


作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)

Image是一個常用的控件,它可以幫助我們顯示圖片,圖片的資源可以是來自網絡、本地或者是內存。在移動端的開發中會大量使用Image來展示一些圖文,了解和掌握Image控件是非常有必要的。

AssetImage 和 Image.asset

AssetImage是Flutter提供的一個可以從本地讀取圖片資源的類,我們可以使用它來讀取圖片。同樣Flutter還提供了Image.asset這個構造方法直接來幫助我們讀取圖片資源並返回一個Image對象。其實Image.asset是對AssetImage一層更高級的封裝。

注意:要讀取本地圖片我們首先需要在pubspec.yaml文件里配置本地圖片資源的路徑,我們這里在assets這個字段下新增了- images/image_demo.jpg這個文件。后續將會有一篇專門的博客來講解資源的管理。

1. AssetImage

Image(
    image: AssetImage("images/image_demo.jpg"),
    width: 80,
    height: 80,
)

2. Image.asset

Image.asset(
    "images/image_demo.jpg",
    width: 80,
    height: 80,
)

兩個方法都是傳入一個本地文件路徑就可以了。

NetworkImage 和 Image.network

NetworkImage是一個可以從網絡下載圖片的類,它本身是異步的。Image.network是對NetworkImage的封裝,它需要傳入一個URL地址就可以返回一個Image對象。這兩個的設計跟AssetImageImage.asset的設計基本一致。
3. NetworkImage

Image(
    image: NetworkImage("http://www.fulade.me/img/avatar.jpg"),
    width: 80,
    height: 80,
)

4. Image.network

Image.network(
    "http://www.fulade.me/img/avatar.jpg",
    width: 80,
    height: 80,
)

Alignment

alignment是Image的一個很重要的參數,它可以幫助我們設置圖片的位置。有以下幾個枚舉值

參數 描述
topCenter 居中靠上
topRight 右上角
centerLeft 居中靠左
center 居中
centerRight 居中靠右
bottomLeft 居右下角
bottomCenter 居中靠下
bottomRight 居右下角

BoxFit

fit參數是很重要的布局參數,當我們的圖片內容跟Image設置的大小不完全吻合的時候,fit的參數值BoxFit可以幫助我們做最優的調整和顯示
5. BoxFit.contain
fit的默認值是BoxFit.contain。由下圖我們不難看出,BoxFit.contain會等比例縮放,保持圖片的原始的比例並且顯示在Image內。
2020_01_11_box_contain

6. BoxFit.fill
由圖可見BoxFit.fill會充滿整個容器,如果圖片大小與容器不完全吻合,可能會出現拉伸。
2020_01_11_box_fill

7. BoxFit.cover
BoxFit.cover會保持圖片資源的大小,如果超過的部分會被裁掉不會顯示。
2020_01_11_box_cover

8. BoxFit.fitWidth
BoxFit.fitWidth會使寬度充滿整個容器,高度會按比例縮放,圖片不會被拉伸,超出容器的部分會被剪裁。
2020_01_11_box_fillwidth

9. BoxFit.fitHeight
BoxFit.fitHeightBoxFit.fitWidth相似,高度會充滿整個容器,寬度會按比例縮放,圖片不會被拉伸,超出容器的部分會被剪裁。
2020_01_11_box_fitheight

10. BoxFit.none
none表示沒有設置顯示策略,以原始大小居中來顯示。
2020_01_11_box_none_2

11. BoxFit.scaleDown
當圖片資源大於容器的時候,效果相當於 BoxFit.none
當組件比圖片小時,效果相當於 BoxFit.contain
2020_01_11_box_scaleDown

對於加載過的圖片Flutter是會幫助我們做內存緩存,最大緩存數量是1000,最大緩存內存空間是100M。

想體驗以上的示例的運行效果,可以到我的Github倉庫項目flutter_app->lib->routes->image_page.dart查看,並且可以下載下來運行並體驗。


公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM