Ahmed Wagdi
Ahmed Wagdi

Reputation: 4391

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

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?

Upvotes: 2

Views: 10353

Answers (3)

Poliin
Poliin

Reputation: 11

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;
    }
  }

Upvotes: 1

Gareth Beall
Gareth Beall

Reputation: 333

Have you tried https://pub.dev/packages/cached_network_image?

It seems like this package will fulfil your requirements.

Upvotes: -2

Guru Prasad mohapatra
Guru Prasad mohapatra

Reputation: 1969

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

Upvotes: 9

Related Questions