NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2174 most downloaded on pub.dev
Plugin for 'flutter_map' providing advanced caching functionality, with ability to download map regions for offline use.
Last release 2 years ago
no release in 18 months
Ships fairly regularly
a new release about every 4 weeks
Most releases are documented
notes for 26 of 34 stable releases
4 versions withdrawn
withdrawn after publishing
5 years old
86 releases · first in 2021
Nothing published for this version
Nothing published for this version
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
One column per quarter.
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
This update builds on v9 to fully embrace the new many-to-many relationship between tiles and stores, which allows for more flexibility when constructing the FMTCTileProvider.
This allows a new paradigm to be used: stores may now be treated as bulk downloaded regions, and all the regions/stores can be used at once - no more switching between them. This allows huge amounts of flexibility and a better UX in a complex application. Additionally, each store may now have its own BrowseStoreStrategy when browsing, which allows more flexibility: for example, stores may now contain more than one URL template/source, but control is retained.
Additionally, vector tiles are now supported in theory, as the internal caching/retrieval logic of the specialised ImageProvider has been exposed, although it is out of scope to fully implement support for it.
Major changes to browse caching
FMTCTileProvider (through the FMTCTileProvider.allStores & FMTCTileProvider.multipleStores constructors)FMTCTileProvider.provideTile method to expose internal browse caching mechanisms for external useBrowseStoreStrategy for increased control over caching behaviourFMTCTileProvider.tileLoadingInterceptor) to track (eg. for debugging and logging) the internal tile loading mechanismsFMTCTileProviderSettings.maxStoreLength with a maxLength property on each store individuallyCacheBehavior with BrowseLoadingStrategyFMTCBrowsingErrorHandler with BrowsingExceptionHandler, which may now return bytes to be displayed instead of (re)throwing exceptionobscureQueryParams with more flexible urlTransformer (and static FMTCTileProvider.urlTransformerOmitKeyValues utility method to provide old behaviour with more customizability) - also applies to bulk downloading in StoreDownload.startForegroundFMTCTileProviderSettings & absorbed properties directly into FMTCTileProviderThere was a significant time loss due to attempting to handle the network request response as a stream of incoming bytes, which allowed for
chunkEventsto be reported back to Flutter (allowing it to get progress updates on the state of the tile), but meant the bytes had to be collected and built manually. Removing this functionality allows the network requests to use more streamlined 'package:http' methods, which does not expose a stream of incoming bytes, meaning that bytes no longer have to be treated manually. This can save hundreds of milliseconds on tile loading - a significant time save of potentially up to ~50% in some cases!
Major changes to bulk downloading
StoreDownload.startForeground into two seperate streams returned as a record, one for TileEvents, one for DownloadProgresssTileEvents into multiple classes and mixins in a sealed inheritance tree to reduce nullability and uncertainty & promote modern Dart featuresDownloadProgress' metrics to reflect other changes and renamed methods to improve clarity and consistency with Dart recommended styleStoreDownload.check to .countTilesImprovements for bulk downloadable BaseRegions
MultiRegion, which contains multiple other BaseRegionsCircleRegion's tile generation & counting algorithmstart and end tiles in downloadsBaseRegion.(maybe)When - this is easy to perform using a standard pattern-matched switchExporting stores is now more stable, and has improved documentation
The method now works in a dedicated temporary environment and attempts to perform two different strategies to move/copy-and-delete the result to the specified directory at the end before failing. Improved documentation covers the potential pitfalls of permissions and now recommends exporting to an app directory, then using the system share functionality on some devices. It now also returns the number of exported tiles.
Removed deprecated remnants from v9.*
Other generic improvements (performance, stability, and documentation)
Brand new example app to demonstrate the new levels of flexibility and customizability
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
removeTilesOlderThan where actually tiles newer than the specified expiry were being removed (#172)See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
FMTCObjectBoxBackend and becomes a no-op on non-FFI platformsSee the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
BaseRegion.toDrawable, and all implementationsSee the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
FlutterEngines would attempt to re-open a single ObjectBox Store (aka. root) multiple timesSee the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md .
See the full CHANGELOG for more information: https://github.com/JaffaKetchup/flutter_map_tile_caching/blob/main/CHANGELOG.md.
This update has essentially rewritten FMTC from the ground up, over hundreds of hours. It focuses on:
I would hugely appricate any donations - please see the documentation site, GitHub repo, or pub.dev package.
I would also like to thank all those who have been waiting and contributing their feedback throughout the process: it means a lot to me that FMTC is such a crucial component to your application.
And without further ado, let's get the biggest changes out of the way first:
Added support for modular storage/root backends through FMTCBackend
FMTCObjectBoxBackend)Restructured top-level access APIs
StoreDirectory & RootDirectory in favour of FMTCStore and FMTCRootFlutterMapTileCaching/FMTC access object, in favour of FMTCStore and FMTCRoot direct constructorsIsolated FMTCObjectBoxBackend, and to keep scope reasonable, I decided to remove them, in favour of backends implementing their own Isolateion as well.Reimplemented bulk downloading
CustomPolygonRegion, a BaseRegion that is formed of any* outlineDownloadableRegion and startForegroundLineRegion tiles by reducing number of redundant duplicate tilesobscuredQueryParamsHttpClientsDeprecated plugins
RootExternal)Migrated to Flutter 3.19 and Dart 3.3
Migrated to flutter_map v6
With those out of the way, we can take a look at the smaller changes:
DownloadableRegion.start)StoreManagement.pruneTilesOlderThan methodStoreStats.allFMTCImageProvider to ensure responses are valid imagesRegionType/type with Dart 3 exhaustive switch statements through BaseRegion/DownloadableRegion.when & RecoverableRegion.toRegionIn addition, there's been more action in the surrounding enviroment:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed bugs when generating tiles for LineRegion
LineRegionBulk downloading has been rewritten to use a new implementation that generates tile coordinates at the same time as downloading tiles
checking the number of tiles in a region now uses a significantly faster and more efficient implementationQueueCancelledExceptions to be thrown, which could crash the appinitialise now automatically renames databases if their filename ID doesn't match their name hashinitialise can now throw a more useful FMTCInitialisationException with improved clarityFMTCDamagedStoreException if it is not presentFMTCImageProvider's oldest tile deleter & bulk downloading now respects custom root directoriesFMTCImageProvider now evicts failed images from Flutter's ImageCache to prevent errorsHttpClients/BaseClientsVersion 7 was made unstable due to a non-semantic versioning compliant update of a dependency.
This means the pub version resolver can never resolve FMTC v7 without introducing compilation errors.[7.2.0] - 2023/03/03
- Stability improvements
- Starting multiple downloads no longer causes
LateInitializationErrors- Migrator storage and memory usage no longer spikes as significantly as previously, thanks to transaction batching
- Opening and processing of stores on initialisation is more robust and less error-prone to filename variations
- Root statistic watching now works on all platforms
- Multiple minor bug fixes and documentation improvements
- Added
maxStoreLengthconfig to example app[7.1.2] - 2023/02/18
- Minor bug fixes
[7.1.1] - 2023/02/16
- Major bug fixes
- Added debug mode
[7.1.0] - 2023/02/14
- Added URL query params obscurer feature
- Added
headersandhttpClientparameters togetTileProvider- Minor documentation improvements
- Minor bug fixes
[7.0.2] - 2023/02/12
- Minor changes to example application
[7.0.1] - 2023/02/11
- Minor bug fixes
- Minor improvements
[7.0.0] - 2023/02/04
- Migrated to Isar database
- Major performance improvements, thanks to Isar
- Added buffering to bulk tile downloading
- Added method to catch tile retrieval errors
- Removed v4 -> v5 migrator & added v6 -> v7 migrator
- Removed some synchronous methods from structure management
- Removed 'fmtc_advanced' import file
Plus the usual:
- Minor performance improvements
- Bug fixes
- Dependency updates
- Documentation improvements
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
* Performance improvements * Changed license to GPL v3 * Updated dependencies
Fixed bugs within import functionality
* Improved stability * Updated dependencies
Nothing published for this version
Added support for flutter_map v3
Nothing published for this version
* Fixed bugs * Updated dependencies * Improved example application
Added import/export functionality
Renamed and refactored internal and public APIs, ready for release
successfulSize statistic to DownloadProgressPolish and preparations for full v5 release
migrator into rootDirectory to fix bugsDownloadManagement to a singleton objectImproved download time estimates and added tiles per second statistic
FMTCSettingsAdded cache hits and misses statistics
invalidateCachedStatisticsUpdated Gradle for example application
Your coding agent can read these notes before it upgrades. Set up the MCP server →