Caching
since v8.2
Last updated
Was this helpful?
since v8.2
Last updated
Was this helpful?
This page contains references to as-of-yet unconfirmed features, which may change without warning. The information on this page is likely to change frequently, and potentially significantly, or may be removed completely.
See for progress.
flutter_map supports integration of basic map tile caching (with compatible tile providers) through caching providers & provides an automatically-enabled implementation on non-web platforms, known as built-in caching.
Built-in caching is not a replacement for caching which can better guarantee resilience. It provides no guarantees as to the safety of cached tiles, which may become unexpectedly lost/inaccessible at any time.
It should not be relied upon where not having cached tiles may lead to a dangerous situation - for example, offline mapping. See Offline Mapping for information about implementing more appropriate solutions.
Caching aims to:
Reduce the strain on tile servers (particularly the )
Improve compliance with tile server terms/requirements
Reduce the costs of using tile servers by reducing unnecessary tile requests
Improve map tile loading speeds, especially on slower networks
Keep your app lightweight - it doesn't require a database
Be extensible, customizable, and integrate with multiple tile providers
It does, however, come at the expense of usage of on-device storage capacity.
Offline mapping and caching can also be implemented in other ways. See Offline Mapping for more information.
Built-in caching is enabled by default on non-web platforms, using the BuiltInMapCachingProvider
implementation.
On web platforms, the browser usually performs caching automatically.
insert link
To configure the default provider, provide arguments to the getOrCreateInstance
factory constructor. Usually this is done when constructing the TileLayer
/TileProvider
:
By default, caching occurs in a platform provided cache directory. The operating system may clear this at any time.
By default, a 1 GB (soft) limit is applied to the built-in caching. This limit is only applied when the cache provider is initialised (usually when the first tiles are loaded on each app session).
HTTP headers are used to determine how long a tile is considered 'fresh' - this fulfills the requirements of many tile servers. However, setting overrideFreshAge
allows the HTTP headers to be overridden, and the tile to be stored and used for a set duration.
The tileKeyGenerator
can be customized. The callback accepts the tile's URL, and converts it to a key used to uniquely identify the tile. By default, it generates a UUID from the entire URL string. However, in some cases, the default behaviour should be changed:
With the default BuiltInMapCachingProvider
, it is possible to delete the cache contents in two ways:
When the app is running, destroy
the current instance and set the deleteCache
argument to true
(then optionally create a new instance if required, which happens automatically on the next tile load by default)
When the app is not running, users may delete the storage directory
If the default cache directory is used, users may do this by 'clearing the app cache' through their operating system, for example. On some platforms, this may need to be done manually (which may be difficult for less technical users), whilst on others, it may be a simple action.
You should check that plugin's documentation for information about initialisation & configuration. You will always need to pass it to the cachingProvider
argument of a compatible TileProvider
.
Before disabling built-in caching, you should check that you can still be compliant with any requirements imposed by your tile server.
It is your own responsibility to comply with any appropriate restrictions and requirements set by your chosen tile server/provider. Always read their Terms of Service. Failure to do so may lead to any punishment, at the tile server's discretion.
If you prefer to disable built-in caching, use the DisabledMapCachingProvider
on each tile provider:
Convenient methods to modify URLs can be found by first parsing it to a using Uri.parse
, working on it (such as with ), then converting it back to a string.
You can also use any other MapCachingProvider
implementation, such as provided by plugins, or ! They may support the web platform, unlike the built-in cache.
The built-in caching is designed to be compliant with the caching requirement for the . Disabling it may make your project non-compliant.