From af1e865d05142502702c2b186a996c8c8479b72e Mon Sep 17 00:00:00 2001 From: rafaelbarbsoatec <rafaelbarbosatec@gmail.com> Date: Fri, 26 Jan 2024 16:27:09 -0300 Subject: [PATCH] TiledNetworkReader improvements --- lib/tiled/reader/tiled_network_reader.dart | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/tiled/reader/tiled_network_reader.dart b/lib/tiled/reader/tiled_network_reader.dart index b561c0195..0be0749d4 100644 --- a/lib/tiled/reader/tiled_network_reader.dart +++ b/lib/tiled/reader/tiled_network_reader.dart @@ -13,6 +13,7 @@ import 'package:tiledjsonreader/tile_set/tile_set_item.dart'; class TiledNetworkReader extends TiledReader { // ignore: constant_identifier_names static const ORIENTATION_SUPPORTED = 'orthogonal'; + static const _keyImgBase64 = 'base64'; final Uri uri; final TiledCacheProvider cache; @override @@ -119,19 +120,26 @@ class TiledNetworkReader extends TiledReader { Future<void> _fetchTilesetImage(String sourceBasePath, String image) async { final url = '$basePath$sourceBasePath$image'; - if (!Flame.images.containsKey(url)) { - final response = await http.get(Uri.parse(url)); - String img64 = base64Encode(response.bodyBytes); - await Flame.images.fromBase64(url, img64); - } + return _loadImage(url); } Future<void> _fetchLayerImage(MapLayer layer) async { if (layer is ImageLayer) { final url = '$basePath${layer.image}'; - if (!Flame.images.containsKey(url)) { + return _loadImage(url); + } + } + + Future<void> _loadImage(String url) async { + if (!Flame.images.containsKey(url)) { + bool containCache = await cache.containsKey(url); + if (containCache) { + String base64 = (await cache.get(url))[_keyImgBase64]; + await Flame.images.fromBase64(url, base64); + } else { final response = await http.get(Uri.parse(url)); String img64 = base64Encode(response.bodyBytes); + cache.put(url, {_keyImgBase64: img64}); await Flame.images.fromBase64(url, img64); } }