You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+45-2Lines changed: 45 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,6 +18,49 @@ Many thanks to my sponsors, no matter how much or how little they donated. Spons
18
18
19
19
# Changelog
20
20
21
+
## [10.0.0] - "Better Browsing" - 2025/01/11
22
+
23
+
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`.
24
+
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.
25
+
26
+
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.
27
+
28
+
* Major changes to browse caching
29
+
* Added support for using multiple stores simultaneously in the `FMTCTileProvider` (through the `FMTCTileProvider.allStores` & `FMTCTileProvider.multipleStores` constructors)
30
+
* Added `FMTCTileProvider.provideTile` method to expose internal browse caching mechanisms for external use
31
+
* Added `BrowseStoreStrategy` for increased control over caching behaviour
32
+
* Added 'tile loading interceptor' feature (`FMTCTileProvider.tileLoadingInterceptor`) to track (eg. for debugging and logging) the internal tile loading mechanisms
33
+
* Added toggle for hit/miss stat recording, to improve performance where these statistics are never read
34
+
* Replaced `FMTCTileProviderSettings.maxStoreLength` with a `maxLength` property on each store individually
35
+
* Replaced `CacheBehavior` with `BrowseLoadingStrategy`
36
+
* Replaced `FMTCBrowsingErrorHandler` with `BrowsingExceptionHandler`, which may now return bytes to be displayed instead of (re)throwing exception
37
+
* Replaced `obscureQueryParams` with more flexible `urlTransformer` (and static `FMTCTileProvider.urlTransformerOmitKeyValues` utility method to provide old behaviour with more customizability) - also applies to bulk downloading in `StoreDownload.startForeground`
38
+
* Removed `FMTCTileProviderSettings` & absorbed properties directly into `FMTCTileProvider`
39
+
* Performance of the internal tile image provider has been significantly improved when fetching images from the network URL
40
+
> There was a significant time loss due to attempting to handle the network request response as a stream of incoming bytes, which allowed for `chunkEvents` to 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!
41
+
42
+
* Major changes to bulk downloading
43
+
* Added support for retrying failed tiles (that failed because the request could not be made) once at the end of the download
44
+
* Changed result of `StoreDownload.startForeground` into two seperate streams returned as a record, one for `TileEvent`s, one for `DownloadProgress`s
45
+
* Refactored `TileEvent`s into multiple classes and mixins in a sealed inheritance tree to reduce nullability and uncertainty & promote modern Dart features
46
+
* Changed `DownloadProgress`' metrics to reflect other changes and renamed methods to improve clarity and consistency with Dart recommended style
47
+
* Renamed `StoreDownload.check` to `.countTiles`
48
+
49
+
* Improvements for bulk downloadable `BaseRegion`s
50
+
* Added `MultiRegion`, which contains multiple other `BaseRegion`s
51
+
* Improved speed (by massive amounts) and accuracy & reduced memory consumption of `CircleRegion`'s tile generation & counting algorithm
52
+
* Fixed multiple bugs with respect to `start` and `end` tiles in downloads
53
+
* Deprecated `BaseRegion.(maybe)When` - this is easy to perform using a standard pattern-matched switch
54
+
55
+
* Exporting stores is now more stable, and has improved documentation
56
+
> 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.
57
+
58
+
* Removed deprecated remnants from v9.*
59
+
60
+
* Other generic improvements (performance, stability, and documentation)
61
+
62
+
* Brand new example app to demonstrate the new levels of flexibility and customizability
63
+
21
64
## [9.1.4] - 2024/12/05
22
65
23
66
* Fixed bug in `removeTilesOlderThan` where actually tiles newer than the specified expiry were being removed ([#172](https://github.com/JaffaKetchup/flutter_map_tile_caching/issues/172))
@@ -29,12 +72,12 @@ Many thanks to my sponsors, no matter how much or how little they donated. Spons
29
72
30
73
## [9.1.2] - 2024/08/07
31
74
32
-
* Fixed compilation on web platforms: FMTC now internally overrides the `FMTCObjectBoxBackend` and becomes a no-op
75
+
* Fixed compilation on web platforms: FMTC now internally overrides the `FMTCObjectBoxBackend` and becomes a no-op on non-FFI platforms
33
76
* Minor documentation improvements
34
77
35
78
## [9.1.1] - 2024/07/16
36
79
37
-
* Fixed bug where errors within the import functionality would not be catchable by the original invoker
80
+
* Fixed bug where errors within the import functionality would not always be catchable by the original invoker
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,22 +2,23 @@
2
2
3
3
## Reporting A Bug
4
4
5
-
FMTC is a large, platform-dependent package, and there's only one person running manual tests on it before releases, so there's a decent chance that a bug you've found is actually a bug. Reporting it is always appreciated!
5
+
I try to test FMTC on as many platforms as I have access to, using a combination of automated tests and manual tests through the example application. However, I only have access to Android and Windows devices. Due to the number of platform-dependent plugins this package uses, bugs are often only present on one platform, which is often iOS. However, they can of course occur on any platform if I've missed one. Reporting any bugs you find is always appreciated!
6
6
7
7
Before reporting a bug, please:
8
8
9
9
* Check if there is already an open or closed issue that is similar to yours
10
-
* Ensure that your Flutter environment is correctly installed & set-up
11
-
*Ensure that this package, 'flutter_map', and any modules are correctly installed & set-up
10
+
* Ensure that Flutter, this package, 'flutter_map', and any modules are correctly installed & set-up
11
+
*Follow the bug reporting issue template
12
12
13
13
## Contributing Code
14
14
15
15
Contributors are always welcome, and support is always greatly appreciated! Before opening a Pull Request, however, please open a feature request or bug report to link the PR to.
16
16
17
+
Please note that all contributions may be dually licensed under an alternative proprietary license on a case-by-case basis, which grants no extra rights to contributors.
18
+
17
19
When submitting code, please:
18
20
19
-
* Keep code concise and in a similar style to surrounding code
20
-
* Document all public APIs in detail and with correct grammar
21
+
* Document all new public APIs
21
22
* Use the included linting rules
22
23
* Update the example application to appropriately consume any public API changes
23
24
* Avoid incrementing this package's version number or changelog
0 commit comments