Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
bafa5f0
Remove 'vector_math' dependency
JaffaKetchup Apr 30, 2025
cfd187b
Initial caching implementation
JaffaKetchup May 3, 2025
6007304
Improved performance of persistent registry writer & format efficiency
JaffaKetchup May 4, 2025
6fe737c
Refactored to re-enable web support
JaffaKetchup May 4, 2025
25ebb25
Improved startup performance by not waiting for caching instance
JaffaKetchup May 4, 2025
b79cb07
Exposed `MapTileCachingManager` & `CachedMapTileMetadata`
JaffaKetchup May 4, 2025
92c37cb
Added `MapCachingOptions.cacheKeyGenerator`
JaffaKetchup May 4, 2025
985ba4c
Merge branch 'master' into caching
JaffaKetchup May 9, 2025
c1a8bb6
Reverted to waiting for manager instance to be created before returni…
JaffaKetchup May 10, 2025
bd5dfe7
Added size monitor
JaffaKetchup May 14, 2025
2c38eb8
Major refactoring & renaming
JaffaKetchup May 15, 2025
e9c4465
Fixed linting issue
JaffaKetchup May 15, 2025
e67f7e4
Improved speed and efficiency of size limiter
JaffaKetchup May 15, 2025
36d7268
Removed leftover debugging tools
JaffaKetchup May 15, 2025
5fe9133
Improved documentation
JaffaKetchup May 17, 2025
192860c
Switch to FlatBuffers instead of JSON
JaffaKetchup May 18, 2025
9321d0c
Return number of tiles loaded from `isInitialised`
JaffaKetchup May 19, 2025
fd7a79b
Added call to `WidgetsFlutterBinding.ensureInitialized` internally
JaffaKetchup May 19, 2025
0997c70
Drop default cache size limit to 800 MB
JaffaKetchup May 19, 2025
5547146
Minor general improvements
JaffaKetchup May 19, 2025
db50851
Replace `catch (_)` with `on Exception`
JaffaKetchup May 19, 2025
92452f6
Switched back to JSON from FlatBuffers
JaffaKetchup May 20, 2025
92a60b1
Fixed size limiter
JaffaKetchup May 20, 2025
3fe5adc
Minor improvement
JaffaKetchup May 20, 2025
6078fe2
Fixed minor bug in example app
JaffaKetchup May 22, 2025
37da3d4
Improved network tile image provider
JaffaKetchup May 23, 2025
c4b2bf4
Merge branch 'master' into caching
JaffaKetchup May 25, 2025
2548269
Replace the JSON registry with a mechanism to store metadata within t…
JaffaKetchup May 27, 2025
56bb2a6
Discard changes to example/lib/main.dart
JaffaKetchup May 27, 2025
5c4899b
Fixed bug
JaffaKetchup May 27, 2025
53e584f
Improved resilience to corruption
JaffaKetchup May 28, 2025
16c1827
Improved resilience to corruption
JaffaKetchup May 29, 2025
5f85c71
Fix unintended change
JaffaKetchup May 29, 2025
3b350dc
Fixed minor bug
JaffaKetchup May 31, 2025
e6ba6d8
Minor improvements & bug fixes
JaffaKetchup Jun 1, 2025
35d0607
Move default `tileKeyGenerator` implementation into a static util method
JaffaKetchup Jun 2, 2025
8497204
Discard changes to lib/src/layer/tile_layer/tile_layer.dart
JaffaKetchup Jun 8, 2025
ac26dde
Merge branch 'master' into caching
JaffaKetchup Jun 8, 2025
5c78329
Prevent fallback tiles from being cached
JaffaKetchup Jun 8, 2025
507ff51
Expose `calculateStaleAt` via `CachedMapTileMetadata.fromHttpHeaders`…
JaffaKetchup Jun 8, 2025
691341a
Merge branch 'master' into caching
JaffaKetchup Jun 15, 2025
7d0a1a7
Added uninitialisation & cache deletion support
JaffaKetchup Jun 15, 2025
1753866
Integrated abortable HTTP requests ('package:http ^1.5.0-beta') into …
JaffaKetchup Jul 8, 2025
4489316
Apply 'terminating period' suggestions from code review
JaffaKetchup Jul 8, 2025
f519ee2
Rename "unneeded" & "unnecessary" to "obsolete"
JaffaKetchup Jul 8, 2025
92dac52
Simplify image provider's `hashCode` implementation
JaffaKetchup Jul 8, 2025
c9ff03b
Fix formatting
JaffaKetchup Jul 8, 2025
64753d5
Added reasoning for avoiding databases
JaffaKetchup Jul 8, 2025
7c2e369
Added file format signature and version to cached tile specification
JaffaKetchup Jul 8, 2025
e2239dc
Convert `_SizeReducerTile` into an object
JaffaKetchup Jul 8, 2025
1ebd84e
Merge branch 'master' into caching
JaffaKetchup Jul 8, 2025
e371fc8
Added TODO
JaffaKetchup Jul 8, 2025
14132ad
Merge branch 'caching' of https://github.com/fleaflet/flutter_map int…
JaffaKetchup Jul 8, 2025
4372897
Minor cache README refinement
JaffaKetchup Jul 9, 2025
ddc736e
Add `CachedMapTile` typedef
JaffaKetchup Jul 9, 2025
ace494d
Merge branch 'master' into caching
JaffaKetchup Jul 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_map_example/pages/abort_obsolete_requests.dart';
import 'package:flutter_map_example/pages/animated_map_controller.dart';
import 'package:flutter_map_example/pages/bundled_offline_map.dart';
import 'package:flutter_map_example/pages/cancellable_tile_provider.dart';
import 'package:flutter_map_example/pages/circle.dart';
import 'package:flutter_map_example/pages/debouncing_tile_update_transformer.dart';
import 'package:flutter_map_example/pages/epsg3996_crs.dart';
Expand Down Expand Up @@ -52,8 +52,8 @@ class MyApp extends StatelessWidget {
),
home: const HomePage(),
routes: <String, WidgetBuilder>{
CancellableTileProviderPage.route: (context) =>
const CancellableTileProviderPage(),
AbortObsoleteRequestsPage.route: (context) =>
const AbortObsoleteRequestsPage(),
PolylinePage.route: (context) => const PolylinePage(),
SingleWorldPolysPage.route: (context) => const SingleWorldPolysPage(),
PolylinePerfStressPage.route: (context) =>
Expand Down
9 changes: 5 additions & 4 deletions example/lib/misc/tile_providers.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_cancellable_tile_provider/flutter_map_cancellable_tile_provider.dart';
import 'package:http/http.dart';
import 'package:http/retry.dart';

final httpClient = RetryClient(Client());

TileLayer get openStreetMapTileLayer => TileLayer(
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: 'dev.fleaflet.flutter_map.example',
// Use the recommended flutter_map_cancellable_tile_provider package to
// support the cancellation of loading tiles.
tileProvider: CancellableNetworkTileProvider(),
tileProvider: NetworkTileProvider(httpClient: httpClient),
);
70 changes: 70 additions & 0 deletions example/lib/pages/abort_obsolete_requests.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
import 'package:flutter_map_example/widgets/notice_banner.dart';
import 'package:latlong2/latlong.dart';

class AbortObsoleteRequestsPage extends StatefulWidget {
static const String route = '/abort_obsolete_requests_page';

const AbortObsoleteRequestsPage({super.key});

@override
State<AbortObsoleteRequestsPage> createState() =>
_AbortUnnecessaryRequestsPage();
}

class _AbortUnnecessaryRequestsPage extends State<AbortObsoleteRequestsPage> {
bool _abortingEnabled = true;

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Abort Obsolete Requests')),
drawer: const MenuDrawer(AbortObsoleteRequestsPage.route),
body: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Center(
child: Switch.adaptive(
value: _abortingEnabled,
onChanged: (value) => setState(() => _abortingEnabled = value),
),
),
),
const NoticeBanner.recommendation(
text: 'Since v8.2.0, in-flight HTTP requests for tiles which are '
'no longer displayed are aborted by default.',
url: 'https://docs.fleaflet.dev/layers/tile-layer/tile-providers',
sizeTransition: 870,
),
Expanded(
child: FlutterMap(
options: MapOptions(
initialCenter: const LatLng(51.5, -0.09),
initialZoom: 5,
cameraConstraint: CameraConstraint.contain(
bounds: LatLngBounds(
const LatLng(-90, -180),
const LatLng(90, 180),
),
),
),
children: [
TileLayer(
key: ValueKey(_abortingEnabled),
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: 'dev.fleaflet.flutter_map.example',
tileProvider: NetworkTileProvider(
abortObsoleteRequests: _abortingEnabled,
),
),
],
),
),
],
),
);
}
}
2 changes: 0 additions & 2 deletions example/lib/pages/animated_map_controller.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_cancellable_tile_provider/flutter_map_cancellable_tile_provider.dart';
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
import 'package:latlong2/latlong.dart';

Expand Down Expand Up @@ -182,7 +181,6 @@ class AnimatedMapControllerPageState extends State<AnimatedMapControllerPage>
urlTemplate:
'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: 'dev.fleaflet.flutter_map.example',
tileProvider: CancellableNetworkTileProvider(),
tileUpdateTransformer: _animatedMoveTileUpdateTransformer,
),
const MarkerLayer(markers: _markers),
Expand Down
74 changes: 0 additions & 74 deletions example/lib/pages/cancellable_tile_provider.dart

This file was deleted.

2 changes: 0 additions & 2 deletions example/lib/pages/fallback_url_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_cancellable_tile_provider/flutter_map_cancellable_tile_provider.dart';
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
import 'package:flutter_map_example/widgets/notice_banner.dart';
import 'package:latlong2/latlong.dart';
Expand Down Expand Up @@ -44,7 +43,6 @@ class FallbackUrlPage extends StatelessWidget {
'https://not-a-real-provider-url.local/{z}/{x}/{y}.png',
fallbackUrl: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: 'dev.fleaflet.flutter_map.example',
tileProvider: CancellableNetworkTileProvider(),
),
],
),
Expand Down
2 changes: 0 additions & 2 deletions example/lib/pages/reset_tile_layer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_cancellable_tile_provider/flutter_map_cancellable_tile_provider.dart';
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
import 'package:latlong2/latlong.dart';

Expand Down Expand Up @@ -63,7 +62,6 @@ class ResetTileLayerPageState extends State<ResetTileLayerPage> {
urlTemplate: layerToggle ? layer1 : layer2,
subdomains: layerToggle ? const [] : const ['a', 'b', 'c'],
userAgentPackageName: 'dev.fleaflet.flutter_map.example',
tileProvider: CancellableNetworkTileProvider(),
),
const MarkerLayer(
markers: [
Expand Down
2 changes: 0 additions & 2 deletions example/lib/pages/tile_builder.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_cancellable_tile_provider/flutter_map_cancellable_tile_provider.dart';
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
import 'package:latlong2/latlong.dart';

Expand Down Expand Up @@ -120,7 +119,6 @@ class TileBuilderPageState extends State<TileBuilderPage> {
urlTemplate:
'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
userAgentPackageName: 'dev.fleaflet.flutter_map.example',
tileProvider: CancellableNetworkTileProvider(),
tileBuilder: tileBuilder,
),
),
Expand Down
3 changes: 1 addition & 2 deletions example/lib/pages/tile_loading_error_handle.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_cancellable_tile_provider/flutter_map_cancellable_tile_provider.dart';
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
import 'package:latlong2/latlong.dart';

Expand Down Expand Up @@ -67,7 +66,7 @@ class TileLoadingErrorHandleState extends State<TileLoadingErrorHandle> {
// or use the recommended tile provider
tileProvider: _simulateTileLoadErrors
? _SimulateErrorsTileProvider()
: CancellableNetworkTileProvider(),
: NetworkTileProvider(),
),
],
);
Expand Down
19 changes: 13 additions & 6 deletions example/lib/widgets/drawer/menu_drawer.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map_example/pages/abort_obsolete_requests.dart';
import 'package:flutter_map_example/pages/animated_map_controller.dart';
import 'package:flutter_map_example/pages/bundled_offline_map.dart';
import 'package:flutter_map_example/pages/cancellable_tile_provider.dart';
import 'package:flutter_map_example/pages/circle.dart';
import 'package:flutter_map_example/pages/debouncing_tile_update_transformer.dart';
import 'package:flutter_map_example/pages/epsg3996_crs.dart';
Expand Down Expand Up @@ -47,7 +47,13 @@ class MenuDrawer extends StatelessWidget {
return Drawer(
child: ListView(
children: <Widget>[
DrawerHeader(
Container(
padding: const EdgeInsets.fromLTRB(16, 32, 16, 16)
.add(EdgeInsets.only(top: MediaQuery.paddingOf(context).top)),
margin: const EdgeInsets.only(bottom: 8),
decoration: BoxDecoration(
border: Border(bottom: Divider.createBorderSide(context)),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expand All @@ -65,11 +71,12 @@ class MenuDrawer extends StatelessWidget {
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14),
),
const SizedBox(height: 8),
if (kIsWeb)
const Text(
Text(
_isWASM ? 'Running with WASM' : 'Running without WASM',
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14),
style: Theme.of(context).textTheme.bodySmall,
),
],
),
Expand Down Expand Up @@ -155,8 +162,8 @@ class MenuDrawer extends StatelessWidget {
currentRoute: currentRoute,
),
MenuItemWidget(
caption: 'Cancellable Tile Provider',
routeName: CancellableTileProviderPage.route,
caption: 'Abort Obsolete Requests',
routeName: AbortObsoleteRequestsPage.route,
currentRoute: currentRoute,
),
MenuItemWidget(
Expand Down
Loading