Site icon Flutter Packages | Pub dev Packages – Flutter Mobile App World

Flutter Package: This is a mixture of FileImage and NetworkImage

Flutter Package: This is a mixture of FileImage and NetworkImage. It will download the image from the URL once, save it locally in the file system, and then use it from there in the future.

network_to_file_image

This is a mixture of FileImage and NetworkImage. It will download the image from the url once, save it locally in the file system, and then use it from there in the future.

In more detail:

Given a file and url of an image, it first tries to read it from the local file. It decodes the given File object as an image, associating it with the given scale.

However, if the image doesn’t yet exist as a local file, it fetches the given URL from the network, associating it with the given scale, and then saves it to the local file. The image will be cached regardless of cache headers from the server.

Notes:

Use the package

If you also listed path_provider in your pubspec.yaml file:

path_provider: ^1.4.4

Then you can create a file from a file name:

Future<File> file(String filename) async {
  Directory dir = await getApplicationDocumentsDirectory();
  String pathName = p.join(dir.path, filename);
  return File(pathName);
}

var myFile = await file("myFileName.png"),

Then, create the image:

Image(image: NetworkToFileImage(url: "http://example.com/someFile.png", file: myFile))

If you make debug: true it prints to the console whether the image was read from the file or fetched from the network:

Image(image: NetworkToFileImage(url: "http://example.com/someFile.png", file: myFile, debug: true))    

Don’t forget to check the example tab.

Canvas

You can also load images to use with the Canvas object of the paint method of a CustomPainter.

ImageProviders can’t be used directly with the Canvas object, but you can use the provided ImageForCanvas class.

For example: Suppose a User object that contains url and filename properties:

var imageForCanvas = ImageForCanvas<User>(
       imageProviderSupplier: (User user) => NetworkToFileImage(file: user.file, url: user.url),
       keySupplier: (User user) => user.filename,
       loadCallback: (image, obj, key) => setState((){}),
     );

// While the image is downloading, this will return null.
var myImage = imageForCanvas.image(user);

if (myImage != null) {
   canvas.drawImage(myImage, ...);
   }

It will use the regular image cache from Flutter, and works not only with NetworkToFileImage provider, but any other image providers.

Tests

You can set mock files (local and in the network). Please see methods:

Your mocked urls are usually only seen by the NetworkToFileImage class. However, you may override the default Dart http methods so that these urls are visible to other ImageProviders.

To that end, simply call this method:

NetworkToFileImage.startHttpOverride();

You can stop the http override by calling:

NetworkToFileImage.stopHttpOverride();

See also

Download Flutter Package: This is a mixture of FileImage and NetworkImage Source Code on GitHub

https://github.com/marcglasberg/network_to_file_image

Exit mobile version