Flutter 構建完整應用手冊-圖片

顯示來自互聯網的圖像

顯示圖像是大多數移動應用程序的基礎。 Flutter提供Image小部件以顯示不一樣類型的圖像。html

爲了處理來自URL的圖像,請使用Image.network構造函數。java

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

獎金:GIF動畫

關於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',
          ),
        ),
      ),
    );
  }
}
相關文章
相關標籤/搜索