如何知道图像是否在 Flutter 中的内存中?
How to know if an Image is in memory in Flutter?
我的应用程序中有一个屏幕,其中有一张图片作为背景,这张图片在我的资产文件夹中。当我导航到这个屏幕时,背景瞬间是空白的,然后图像被加载并出现。这让我的屏幕在半秒或更短时间内看起来很奇怪,但足以让用户注意到。
我希望只有在加载图像后才能导航到该屏幕(我可以在上一个屏幕上等待),这样我就可以避免这种行为,并在用户导航到那里时将屏幕作为一个整体。
我知道可以让图像淡入,但这不是我想要的体验。
你需要使用ImageProvider.resolve方法
假设您在资产中注册了一些图像。
然后您可以获取图像提供者
_imageProvider = Image.asset("your_asset").image
.
那么你可以添加这样的方法:
import 'dart:ui';
Image _image;
bool _resolved;
void _resolveImageProvider() {
ImageStream stream = _imageProvider.resolve(createLocalImageConfiguration(context));
stream.addListener(ImageStreamListener((info, _) {
setState(() {
//here you may set some flags or anything which indicates the image is in memory now.
_resolved = true;
_image = info.image;
});
}));
}
然后你可以在"previous screen"上调用这个方法,等到侦听器被触发,然后导航到下一个视图。
我的应用程序中有一个屏幕,其中有一张图片作为背景,这张图片在我的资产文件夹中。当我导航到这个屏幕时,背景瞬间是空白的,然后图像被加载并出现。这让我的屏幕在半秒或更短时间内看起来很奇怪,但足以让用户注意到。
我希望只有在加载图像后才能导航到该屏幕(我可以在上一个屏幕上等待),这样我就可以避免这种行为,并在用户导航到那里时将屏幕作为一个整体。
我知道可以让图像淡入,但这不是我想要的体验。
你需要使用ImageProvider.resolve方法
假设您在资产中注册了一些图像。 然后您可以获取图像提供者
_imageProvider = Image.asset("your_asset").image
.
那么你可以添加这样的方法:
import 'dart:ui';
Image _image;
bool _resolved;
void _resolveImageProvider() {
ImageStream stream = _imageProvider.resolve(createLocalImageConfiguration(context));
stream.addListener(ImageStreamListener((info, _) {
setState(() {
//here you may set some flags or anything which indicates the image is in memory now.
_resolved = true;
_image = info.image;
});
}));
}
然后你可以在"previous screen"上调用这个方法,等到侦听器被触发,然后导航到下一个视图。