How to Show an Local image till the NetworkImage() Loads Up in flutter? How to Show an Local image till the NetworkImage() Loads Up in flutter? dart dart

How to Show an Local image till the NetworkImage() Loads Up in flutter?


You may want to try a FadeInImage wrapped in a ClipOval. FadeInImage provides a placeholder property you can use while the network image is loading.

Note: ClipOval can be expensive if you do it a lot, so use it sparingly.


There is a new official widget for this now!

First, create a folder called assets in the project root directory.

Then, mention the folder in pubspec.yaml file (also found in the project root directory):

flutter:  uses-material-design: true  assets:    - assets/

You can put a picture there, for example, put this as ./assets/loading.gif.

Loading.gif

(If you changed files in assets folder, hot reload won't work. Make sure you restart the app entirely.)

Now you can refer to the loading file in the code:

FadeInImage.assetNetwork(  placeholder: 'assets/loading.gif',  image: 'https://github.com/flutter/website/blob/master/src/_includes/code/layout/lakes/images/lake.jpg?raw=true',);

For more details: https://flutter.io/docs/cookbook/images/fading-in-images#from-asset-bundle


Use a StateflWidget and you can add a listener to the ImageStream and override the initState to trigger a replacement between the local image and the one obtained from the internet when it is fully loaded.

I have used a high resolution image to show the loading time:

enter image description here

  var _loadImage = new AssetImage(      'assets/img/basic2-090_loader_loading-512.png');  var _myEarth = new NetworkImage(      "http://qige87.com/data/out/73/wp-image-144183272.png");  bool _checkLoaded = true;  @override  void initState() {    _myEarth.resolve(new ImageConfiguration()).addListener((_, __) {      if (mounted) {        setState(() {          _checkLoaded = false;        });      }    });  }  @override  Widget build(BuildContext context) {    return new Scaffold(        body: new Center(child: new Container(          decoration: new BoxDecoration(shape: BoxShape.circle,),          height: 80.0,          width: 80.0,          child: new CircleAvatar(            backgroundColor: Theme                .of(context)                .scaffoldBackgroundColor,            backgroundImage: _checkLoaded ? _loadImage : _myEarth,          ),)        )    );  }}