I am making a wallpaper application in which it displays many HD images from a list in a GridView.builder (around 90 HD images) and the images are not getting cached. They reload every time when I scroll up and down. I tried using the normal network image and even CachedNetworkImage but same result. Any solution?
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Fetch Data JSON"),),
body: isLoading? Container(
alignment: new Alignment(0, 0),
child: CircularProgressIndicator(),
decoration: new BoxDecoration(color: Color.fromARGB(230, 0, 0, 0)),)
:
Container(
decoration: new BoxDecoration(color: Color.fromARGB(230, 0, 0, 0)),
child: new GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 1,childAspectRatio:3),
itemCount: list.length,
padding: EdgeInsets.all(0.0),
itemBuilder: (BuildContext context, int index) {
final cacheimg = CachedNetworkImage(
imageUrl: list[index].imgcollectionsrcimage.toString(),
placeholder: new CircularProgressIndicator(),
errorWidget: new Icon(Icons.error, color: Colors.white,),
);
return Stack(
children: <Widget>[
//new Image.network(list[index].imgcollectionsrcimage.toString())
/*
new CachedNetworkImage(
imageUrl: imgsrc1[index],
placeholder: new CircularProgressIndicator(),
errorWidget: new Icon(Icons.error, color: Colors.white,),
),
*/
////////////////////////////////////////////srcimage/////////////////////////////////////////////////
new GestureDetector(
//onTap: (){_gotoImageCollections(list[index].hreflink.toString());},
child: new Container (
child: Container(
decoration: BoxDecoration(
borderRadius: new BorderRadius.all(Radius.circular(5)),
image: DecorationImage(
//colorFilter: const ColorFilter.mode(const Color.fromARGB(150, 0, 0, 0), BlendMode.darken),
image: NetworkImage(list[index].imgcollectionsrcimage.toString()),
fit: BoxFit.cover,
),
boxShadow: <BoxShadow>[new BoxShadow(color: const Color.fromARGB(150, 0, 0, 0),offset: new Offset(0.0, 3.0),blurRadius: 5.0)]
),
),
padding: EdgeInsets.all(2.0),
//decoration: BoxDecoration(boxShadow:<BoxShadow>[new BoxShadow(color: const Color.fromARGB(50, 0, 0, 0),offset: new Offset(0.0, 0.0),blurRadius: 0.0)]),
),
),
],
);
},
),
)
);
}
}
Video: https://streamable.com/2xg13
We add void initState() method. In this method, we will add variable image1 and image 2 is equal to add images from your assets folders. Now that all images have been preloaded, we can use them in our build method. In the body, we will add a Center widget.
We have a simple yet useful method in Flutter which we can use to load our asset images much faster — precacheImage()! This method prefetches the image into the image cache and then whenever the image is used, it will be loaded much faster.
CachedNetworkImage shows a network image using a caching mechanism. It also provides support for a placeholder, showing an error and fading into the loaded image. Next to that it supports most features of a default Image widget.
You can customize the max space for image caching with the following.
class CustomImageCache extends WidgetsFlutterBinding {
@override
ImageCache createImageCache() {
ImageCache imageCache = super.createImageCache();
// Set your image cache size
imageCache.maximumSizeBytes = 1024 * 1024 * 100; // 100 MB
return imageCache;
}
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (kReleaseMode) {
CustomImageCache();
}
runApp(MyApp());
}
This is to override Flutter's internal image caching, not the CacheNetworkImage one. Flutter uses 100 MiB by default, so you can try higher values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With