tileImageAsync method
Retrieves a tile from the store and extracts it's Image asynchronously
randomRange controls the randomness of the tile chosen (defaults to null):
- null : no randomness - the first tile is chosen
- value <= 0 : any tile may be chosen
- value >= store length : any tile may be chosen
- value < store length : any tile up to this range may be chosen, enforcing an iteration limit internally
Note that tiles are not necessarily ordered chronologically. They are usually ordered alphabetically.
Eventually returns null if there are no cached tiles in this store, otherwise an Image with size height and width.
Implementation
Future<Image?> tileImageAsync({
int? randomRange,
double? size,
}) async {
final int storeLen = await _storeDirectory.stats.storeLengthAsync;
if (storeLen == 0) return null;
int i = 0;
final int randomNumber = randomRange == null
? 0
: Random().nextInt(
randomRange <= 0 ? storeLen : randomRange.clamp(0, storeLen),
);
await for (final FileSystemEntity e
in await _access.tiles.listWithExists()) {
if (i >= randomNumber) {
return Image.file(
File(e.absolute.path),
width: size,
height: size,
);
}
i++;
}
return null;
}