我正在制作一个壁纸应用程序,它从GridView.builder中的列表中显示许多高清图像(大约90张高清图像),并且图像没有被缓存。每次我上下滚动的时候他们都会重新装填。我尝试使用正常的网络映像,甚至CachedNetworkImage,但结果是一样的。有解决办法吗?
@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)]),
),
),
],
);
},
),
)
);
}
}
发布于 2019-07-05 12:25:06
您可以使用以下内容自定义图像缓存的最大空间。
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());
}
这是为了覆盖Flutter的内部映像缓存,而不是CacheNetworkImage缓存。Flutter默认使用100 MiB,因此您可以尝试更高的值。
发布于 2020-07-20 02:44:57
将cacheExtent值更改为9999,它适用于我
ListView.builder(cacheExtent: 9999)
https://stackoverflow.com/questions/54377133
复制相似问题