顯示圖像是大多數移動應用程序的基礎。 Flutter提供Image小部件以顯示不一樣類型的圖像。html
爲了處理來自URL的圖像,請使用Image.network構造函數。java
new Image.network( 'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg', )
關於Image部件的一個驚人的事情:它也支持動畫GIF開箱!git
new Image.network( 'https://github.com/flutter/plugins/raw/master/packages/video_player/doc/demo_ipod.gif?raw=true', );
默認的Image.network構造函數不能處理更多的高級功能,例如在下載後將圖像加載或緩存到設備後淡入圖像。 要完成這些任務,請參閱如下配方:github
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', ), ), ); } }
使用默認images小部件顯示圖像時,您可能會注意到它們在加載時會彈出到屏幕上。 這可能會讓用戶產生視覺震撼。web
相反,若是你最初能夠顯示一個佔位符,那麼它會不會很好,而且圖像在加載時會淡入? 咱們能夠使用與Flutter一塊兒打包的FadeInImage部件來達到這個目的!緩存
FadeInImage能夠處理任何類型的圖像:內存,本地資源或互聯網上的圖像。網絡
在這個例子中,咱們將使用transparent_image包做爲一個簡單的透明佔位符。 您也能夠考慮按照Assets和Images指南使用本地資源來佔位符。app
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', ), ), ], ), ), ); } }
在某些狀況下,在從網絡上下載圖像時緩存圖像可能會很方便,以便它們能夠脫機使用。 爲此,咱們將使用cached_network_image包。less
除了緩存以外,cached_image_network軟件包在加載時還支持佔位符和淡入淡出的圖像!ide
new CachedNetworkImage( imageUrl: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true', );
cached_network_image包容許咱們使用任何部件做爲佔位符! 在這個例子中,咱們將在圖片加載時顯示一個蜘蛛。
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', ), ), ), ); } }