flutter圖片加載

在 Flutter 中触创,提供了 Image 組件來描述圖片組件,Image 的數(shù)據(jù)源可以是靜態(tài)文件为牍、內(nèi)存以及網(wǎng)絡(luò)哼绑。
在 Image Widget 中,有一個(gè)必須的屬性 image吵聪,它對(duì)應(yīng)的是一個(gè) ImageProvider 。ImageProvider 是一個(gè)抽象類兼雄,主要定義了圖片數(shù)據(jù)獲取的接口 load()吟逝,從不同的數(shù)據(jù)源獲取圖片需要實(shí)現(xiàn)不同的 ImageProvider。

加載本地圖片

在 Flutter 中赦肋,加載本地圖片比加載網(wǎng)絡(luò)圖片還要復(fù)雜块攒。。佃乘。因?yàn)榧虞d本地圖片不僅僅是引用本地文件的資源路徑囱井,還要進(jìn)行相關(guān)的配置。
步驟一:在工程的根目錄創(chuàng)建一個(gè) images 目錄趣避,并將圖片拷貝至該目錄中庞呕。

步驟二:在 pubspec.yaml 中的 flutter 部分添加配置:

assets:
  - images/space.jpg

需要注意的是 yaml 的語法,空格以及縮進(jìn)不能錯(cuò)程帕,修改配置后熱重載不會(huì)生效住练,需要重新啟動(dòng)項(xiàng)目。

步驟三:加載圖片

Image(
  image: AssetImage("images/space.jpg"),
  width: 100,
)

加載網(wǎng)絡(luò)圖片

轉(zhuǎn)自(https://flutterchina.club/assets-and-images/)
顯示圖片是大多數(shù)移動(dòng)應(yīng)用程序的基礎(chǔ)愁拭。Flutter提供了Image Widget來顯示不同類型的圖片讲逛。

為了處理來自URL的圖像,請(qǐng)使用Image.network構(gòu)造函數(shù)岭埠。

new Image.network(
'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg',
)

Bonus: GIF動(dòng)畫

Image Widget的一個(gè)驚艷的功能是:支持GIF動(dòng)畫盏混!

new Image.network(
  'https://github.com/flutter/plugins/raw/master/packages/video_player/doc/demo_ipod.gif?raw=true',
);
完整的例子
import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var title = 'Web Images';

    return new MaterialApp(
      title: title,
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text(title),
        ),
        body: new Image.network(
          'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
        ),
      ),
    );
  }
}

占位圖過渡

當(dāng)使用默認(rèn)Image widget顯示圖片時(shí),您可能會(huì)注意到它們?cè)诩虞d完成后會(huì)直接顯示到屏幕上惜论。這可能會(huì)讓用戶產(chǎn)生視覺突兀许赃。

相反,如果你最初顯示一個(gè)占位符馆类,然后在圖像加載完顯示時(shí)淡入图焰,那么它會(huì)不會(huì)更好?我們可以使用[FadeInImage]來達(dá)到這個(gè)目的蹦掐!

FadeInImage適用于任何類型的圖片:內(nèi)存技羔、本地Asset或來自網(wǎng)上的圖片僵闯。

在這個(gè)例子中,我們將使用transparent_image包作為一個(gè)簡單的透明占位圖藤滥。 您也可以考慮按照Assets和圖片指南使用本地資源來做占位圖鳖粟。

new FadeInImage.memoryNetwork(
  placeholder: kTransparentImage,
  image: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
);
完整例子
import 'package:flutter/material.dart';
import 'package:transparent_image/transparent_image.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final title = 'Fade in images';

    return new MaterialApp(
      title: title,
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text(title),
        ),
        body: new Stack(
          children: <Widget>[
            new Center(child: new CircularProgressIndicator()),
            new Center(
              child: new FadeInImage.memoryNetwork(
                placeholder: kTransparentImage,
                image:
                    'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
              ),
            ),
          ],
        ),
      ),
    );
  }
}

使用緩存圖片

在某些情況下,在從網(wǎng)上下載圖片后緩存圖片可能會(huì)很方便拙绊,以便它們可以脫機(jī)使用向图。為此,我們可以使用cached_network_image包來達(dá)到目的标沪。

除了緩存之外榄攀,cached_image_network包在加載時(shí)還支持占位符和淡入淡出圖片!

new CachedNetworkImage(
  imageUrl: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
);
添加一個(gè)占位符

cached_network_image包允許我們使用任何Widget作為占位符金句!在這個(gè)例子中檩赢,我們將在圖片加載時(shí)顯示一個(gè)進(jìn)度圈。

new CachedNetworkImage(
  placeholder: new CircularProgressIndicator(),
  imageUrl: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
);
完整的例子
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final title = 'Cached Images';

    return new MaterialApp(
      title: title,
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text(title),
        ),
        body: new Center(
          child: new CachedNetworkImage(
            placeholder: new CircularProgressIndicator(),
            imageUrl:
                'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
          ),
        ),
      ),
    );
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末违寞,一起剝皮案震驚了整個(gè)濱河市贞瞒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趁曼,老刑警劉巖军浆,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挡闰,居然都是意外死亡乒融,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門摄悯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來簇抵,“玉大人,你說我怎么就攤上這事射众〉冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵叨橱,是天一觀的道長典蜕。 經(jīng)常有香客問我,道長罗洗,這世上最難降的妖魔是什么愉舔? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮伙菜,結(jié)果婚禮上轩缤,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好火的,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布壶愤。 她就那樣靜靜地躺著,像睡著了一般馏鹤。 火紅的嫁衣襯著肌膚如雪征椒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天湃累,我揣著相機(jī)與錄音勃救,去河邊找鬼。 笑死治力,一個(gè)胖子當(dāng)著我的面吹牛蒙秒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宵统,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼晕讲,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了榜田?” 一聲冷哼從身側(cè)響起益兄,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤锻梳,失蹤者是張志新(化名)和其女友劉穎箭券,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疑枯,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辩块,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荆永。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片废亭。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖具钥,靈堂內(nèi)的尸體忽然破棺而出豆村,到底是詐尸還是另有隱情,我是刑警寧澤骂删,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布掌动,位于F島的核電站,受9級(jí)特大地震影響宁玫,放射性物質(zhì)發(fā)生泄漏粗恢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一欧瘪、第九天 我趴在偏房一處隱蔽的房頂上張望眷射。 院中可真熱鬧,春花似錦、人聲如沸妖碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗅绸。三九已至脾猛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鱼鸠,已是汗流浹背猛拴。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚀狰,地道東北人愉昆。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像麻蹋,于是被迫代替她去往敵國和親跛溉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Flutter中扮授,通過Image組件來加載并顯示圖片,可以從asset芳室、文件、內(nèi)存以及網(wǎng)絡(luò)獲取圖片刹勃,都需要實(shí)現(xiàn)不同...
    Mariko00o閱讀 2,837評(píng)論 0 2
  • 剛上手Flutter時(shí)會(huì)碰到幾個(gè)圖片加載的插件堪侯,剛開始可能無所謂性能好壞,能滿足我們的需求就是好的插件 荔仁;當(dāng)我們遇...
    wethereornot閱讀 12,065評(píng)論 1 17
  • 1. 加載項(xiàng)目中的圖片: 在項(xiàng)目根目錄中創(chuàng)建 images 文件夾伍宦,然后放入三張圖片; 在 yaml 文件中添加乏梁;...
    ChenME閱讀 5,017評(píng)論 5 5
  • 一次洼、初識(shí)flutter image 在講解源碼之前,我們先看下面幾個(gè)例子遇骑,回顧一下flutter加載圖片資源的方式...
    五月_f6d4閱讀 11,169評(píng)論 3 23
  • 久違的晴天卖毁,家長會(huì)。 家長大會(huì)開好到教室時(shí)落萎,離放學(xué)已經(jīng)沒多少時(shí)間了湃望。班主任說已經(jīng)安排了三個(gè)家長分享經(jīng)驗(yàn)矾湃。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,493評(píng)論 16 22