当用户离线时,我们尝试保存、加载和显示来自网络的图像
void saveImage(String imageUrl,String imageName) async{
File file = File(await getImagePath(mediaName));
ByteData questionmediaData = await NetworkAssetBundle(Uri.parse(imageUrl)).load("");
file.writeAsString(questionmediaData.buffer.asUint8List());
}
Future<Uint8List> loadImage(String mediaName) async{
String path = imageUrl + mediaName;
if(await File(path).exists()){
File file = File(await getImagePath(path));
return await file.readAsString();
}
return null;
}
Future<String> getImagePath(String imageName) async {
Directory appDocumentsDirectory = await getapplicationDocumentsDirectory();
String appDocumentsPath = appDocumentsDirectory.path;
String filePath = '$appDocumentsPath/$imageName';
return filePath;
}
我们有一个 ImageProvider 类:
class OurImageProvider {
static Widget getImage(String imageName,{BoxFit fit = BoxFit.cover,double width,double height,ImageType imageType = ImageType.standard}) {
if(!hasText(imageName)){
if(imageType == ImageType.content)
return Image(
image: AssetImage('assets/dummy_images/catalog_dummy.jpg'),fit: BoxFit.cover,width: width,height: height,);
else
return Container();
}
return Image.network(imageName,fit: fit,errorBuilder: (BuildContext context,Object exception,StackTrace stackTrace) {
return getaltImage(imageName,width,height,fit);
},);
}
static Image getDummyImage(double width,BoxFit fit) => Image(image: AssetImage('assets/dummy_images/dummy.jpg'),fit: fit);
static getaltImage(String imageName,BoxFit fit) async{
var localImage = await LocalStorage.instance.loadImage(imageName);
if(localImage != null){
return Image.memory(localImage,StackTrace stackTrace) {
return getDummyImage(width,fit);
},);
}
return getDummyImage(width,fit);
}
}
我们的问题是现在我找不到修复这个类的方法,因为 getaltImage
必须是异步的,而且我无法让 getImage
在构建方法中用作子项。 ..