【发布时间】:2022-10-23 16:43:41
【问题描述】:
您可以使用precacheImage 功能
【讨论】:
我最终使用了这样的东西
@override
void initState() {
findImageToCache();
loading = true;
super.initState();
}
void findImageToCache() {
Timer(const Duration(microseconds: 1), () async {
final manifestJson =
await DefaultAssetBundle.of(context).loadString('AssetManifest.json');
List<String> imagePaths = json
.decode(manifestJson)
.keys
.where((String key) => key.startsWith('assets/images'))
.toList();
for (int i = 0; i < imagePaths.length; i++) {
String path = imagePaths[i];
String filename = (path.split('/').last);
Image image = Image.asset(path);
globals.imageCache[filename] = image;
}
Timer.periodic(const Duration(milliseconds: 1), precache);
});
}
void precache(Timer t) {
List<String> keys = globals.imageCache.keys.toList();
for (int i = 0; i < keys.length; i++) {
Image image = globals.imageCache[keys[i]]!;
precacheImage(image.image, context);
}
loading = false;
t.cancel();
setState(() {});
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
if (loading) {
return LoadingWidget();
}
// the rest
}
要调用它,我使用
Image(image: globals.imageCache["familypicitem.png"]!.image, height: ySize,)
我首先在 assets/images 中找到所有图像 然后我将它加载到缓存
【讨论】: