Flutter:从 newtwork 保存和加载图像

当用户离线时,我们尝试保存、加载和显示来自网络的图像

  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 在构建方法中用作子项。 ..

feng215 回答:Flutter:从 newtwork 保存和加载图像

尝试添加await

return Image.memory(await localImage,...);
,

FutureBuilder 是我的解决方案......

    return Image.network(url,fit: fit,width: width,height: height,errorBuilder: (BuildContext context,Object exception,StackTrace stackTrace) {
    return FutureBuilder(
      future: getAltImage(imageName,width,height,fit),builder: (context,snapshot){
        if(snapshot.hasData){
          print(snapshot.data.toString());
          return snapshot.data;
        }else{
          return Container();
        }
      }
    );
  },
本文链接:https://www.f2er.com/14328.html

大家都在问