当使用默认Image widget显示图片时,您可能会注意到它们在加载完成后会直接显示到屏幕上。这可能会让用户产生视觉突兀。

相反,如果你最初显示一个占位符,然后在图像加载完显示时淡入,那么它会不会更好?我们可以使用FadeInImage来达到这个目的!

FadeInImage适用于任何类型的图片:内存、本地Asset或来自网上的图片。

在这个例子中,我们将使用transparent_image包作为一个简单的透明占位图。 您也可以考虑按照Assets和图片指南使用本地资源来做占位图。

  1. new FadeInImage.memoryNetwork(
  2. placeholder: kTransparentImage,
  3. image: 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
  4. );

完整的例子

  1. import 'package:flutter/material.dart';
  2. import 'package:transparent_image/transparent_image.dart';
  3. void main() {
  4. runApp(new MyApp());
  5. }
  6. class MyApp extends StatelessWidget {
  7. @override
  8. Widget build(BuildContext context) {
  9. final title = 'Fade in images';
  10. return new MaterialApp(
  11. title: title,
  12. home: new Scaffold(
  13. appBar: new AppBar(
  14. title: new Text(title),
  15. ),
  16. body: new Stack(
  17. children: <Widget>[
  18. new Center(child: new CircularProgressIndicator()),
  19. new Center(
  20. child: new FadeInImage.memoryNetwork(
  21. placeholder: kTransparentImage,
  22. image:
  23. 'https://github.com/flutter/website/blob/master/_includes/code/layout/lakes/images/lake.jpg?raw=true',
  24. ),
  25. ),
  26. ],
  27. ),
  28. ),
  29. );
  30. }
  31. }