Flutter入門進(jìn)階之旅(五)Image Widget

往期專題回顧:

前面我們學(xué)習(xí)了Flutter中用于文本顯示的Widget,比如我們顯示一行或者一段基本文字會(huì)用到Text Widget,如果需要跟Text設(shè)置樣式,顏色等屬性,我們可以通過給Text指定style來定制TextStyle中的樣式來展示我們需要的效果,對(duì)于文本輸入控件,我們學(xué)習(xí)了TextField,了解到可以通過TextField完成簡(jiǎn)單的文本輸入需求,可以通過InputDecoration給輸入框添加樣式,比如舒服輔助提示、邊框、兩邊的icon等等。

今天我們來學(xué)習(xí)一下另外一個(gè)Widget---Image,顧名思義Image是用于展示圖片的控件,他跟Text一樣,同屬于StatelessWidget,關(guān)于StatelessWidget跟StatefullWidget我會(huì)在稍后的文章中具體講解,在此讀者可暫且忽略這一知識(shí)點(diǎn),在做原生Android開發(fā)時(shí),我們可以給ImageView指定不同的圖片來源,可以是來源網(wǎng)絡(luò)、drawable、bitmap、文件等,在Flutter中同樣支持加載不同來源的圖片,只不過Flutter加載不同資源的圖片跟原生Android稍微有點(diǎn)差別,下面我們一起進(jìn)入本期的主題。

Flutter加載不同資源圖片的方式:

  • new Image, 用于從ImageProvider獲取圖像。
  • new Image.asset, 用于從AssetBundle獲取圖像。
  • new Image.network, 用于從URL獲取圖像。
  • new Image.file, 用于從文件中獲取圖像。
  • new Image.memory, 用于從內(nèi)存中獲取圖像

在flutter中Image支持JPEG, PNG, GIF, Animated GIF, WebP, Animated WebP, BMP, 和 WBMP這幾種圖片格式。

  1. 從網(wǎng)絡(luò)加載圖片:

為了養(yǎng)成良好的代碼閱讀習(xí)慣,我們還是先來看下Image.network的構(gòu)造方法


Image.network(String src, {
    Key key,
    double scale: 1.0,//縮小倍數(shù)
    this.width,//寬
    this.height,//高
    this.color,
    this.colorBlendMode,
    this.fit, //填充方式
    this.alignment: Alignment.center,
    this.repeat: ImageRepeat.noRepeat, //圖片排列方式
    this.centerSlice,
    this.matchTextDirection: false,
    this.gaplessPlayback: false,
    Map<String, String> headers,
  })

通過構(gòu)造方法,我們可以初步清楚的了解到在Flutter中加載網(wǎng)絡(luò)圖片,只需要在Image.network中指定圖片的src,也就是目標(biāo)圖片的url即可,如果需要配置圖片寬高、縮放比對(duì)應(yīng)構(gòu)造方法去寫就好,下面實(shí)例代碼,展示了從目標(biāo)url上加載圖片,并且把圖片的寬高設(shè)置為500*500;

效果圖:


image

示例代碼:


import 'package:flutter/material.dart';
 
void main() {
  runApp(new MaterialApp(home: new ImageDemo()));
}
 
class ImageDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new TextField(
          decoration: new InputDecoration(),
        ),
      ),
      body: new Image.network("https://p1.ssl.qhmsg.com/dr/220__/t01d5ccfbf9d4500c75.jpg",width:500,height: 500,)
    );
  }
}
  1. 從項(xiàng)目本地目錄加載圖片:

Flutter中加載項(xiàng)目目錄下的圖片,需要我們先從pubspec.yaml中聲明導(dǎo)入資源后,才能在dart文件中使用圖片資源,不然即使圖片存在項(xiàng)目目錄下,在dart文件中你指定路徑后也不能正常加載,這點(diǎn)讀者應(yīng)注意一下,跟我們寫原生Android有點(diǎn)不同。

比如我在項(xiàng)目中把images文件夾下的兩張圖片aaa.png、a.png通過pubspec.yaml導(dǎo)入到項(xiàng)目中:


image

把上述代碼中body部分換成Image.asset方式。

body: new Image.asset('images/aaa.png',width: 500,height: 500,)

關(guān)于Image.asset的構(gòu)造方法跟network大同小異,我就不貼出來了,讀者可自行查閱源碼,下面看下我們從項(xiàng)目目錄下加載的圖片結(jié)束我們本期關(guān)于Image的學(xué)習(xí)。

效果圖:

image

下一篇:Flutter入門進(jìn)階之旅(六)Layout Widget

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容