How to download image from network and use as an asset image offline in flutter

Viewed 6993

I am using sqlflite flutter package to manage a small database for my app, there is a table where I have some urls for few images from the internet , but I need to save them and use the files instead of urls to show this images later. I mean I want to do something like this :

bool internet
internet ? Image.network('the_url') : Image.assets("path to image in my assets folder")

so, is there any way to fetch images from urls and save it to be able to access it later?

3 Answers

You can download the image with NetworkAssetBundle and convert to Unint8List

final ByteData imageData = await NetworkAssetBundle(Uri.parse("YOUR_URL")).load("");
final Uint8List bytes = imageData.buffer.asUint8List();

Then you can load it through Image.memory() widget

Image.memory(bytes);

You can store that data in sqflite and retrive when needed

You can use the path_provider package to download from internet and save it locally. Then you can load from local asset if available. Otherwise it can download from the internet also.

  Future<String?> loadPath() async {
    var dir = await getApplicationDocumentsDirectory();
    String dirName = widget.url!.substring(87);
    file = File("${dir.path}/$dirName");

    if (file.existsSync() == true && _isDownloadingPDF == false) {
      // debugPrint('file.path returned');
      return file.path;
    } else {
      return null;
    }
  }
Related