From 11a4f9a373604f0b6b0013552c5766620c55f070 Mon Sep 17 00:00:00 2001 From: ericz Date: Sun, 24 May 2026 11:37:56 +0200 Subject: [PATCH] try OpenStreetMap Dark --- lib/screens/channel_message_path_screen.dart | 1 + lib/screens/line_of_sight_map_screen.dart | 1 + lib/screens/map_cache_screen.dart | 1 + lib/screens/map_screen.dart | 1 + lib/screens/path_trace_map.dart | 1 + lib/services/map_tile_cache_service.dart | 40 ++++++++++++++++++++ 6 files changed, 45 insertions(+) diff --git a/lib/screens/channel_message_path_screen.dart b/lib/screens/channel_message_path_screen.dart index a05c4e15..5f0e7ef8 100644 --- a/lib/screens/channel_message_path_screen.dart +++ b/lib/screens/channel_message_path_screen.dart @@ -561,6 +561,7 @@ class _ChannelMessagePathMapScreenState TileLayer( urlTemplate: tileCache.urlTemplate, tileProvider: tileCache.tileProvider, + tileBuilder: tileCache.tileBuilder, userAgentPackageName: MapTileCacheService.userAgentPackageName, maxZoom: 19, diff --git a/lib/screens/line_of_sight_map_screen.dart b/lib/screens/line_of_sight_map_screen.dart index f1b18e9d..f99f8853 100644 --- a/lib/screens/line_of_sight_map_screen.dart +++ b/lib/screens/line_of_sight_map_screen.dart @@ -472,6 +472,7 @@ class _LineOfSightMapScreenState extends State { TileLayer( urlTemplate: tileCache.urlTemplate, tileProvider: tileCache.tileProvider, + tileBuilder: tileCache.tileBuilder, userAgentPackageName: MapTileCacheService.userAgentPackageName, maxZoom: 19, ), diff --git a/lib/screens/map_cache_screen.dart b/lib/screens/map_cache_screen.dart index d6ce8489..ac0af5ee 100644 --- a/lib/screens/map_cache_screen.dart +++ b/lib/screens/map_cache_screen.dart @@ -398,6 +398,7 @@ class _MapCacheScreenState extends State { TileLayer( urlTemplate: tileCache.urlTemplate, tileProvider: tileCache.tileProvider, + tileBuilder: tileCache.tileBuilder, userAgentPackageName: MapTileCacheService.userAgentPackageName, maxZoom: 19, diff --git a/lib/screens/map_screen.dart b/lib/screens/map_screen.dart index 887a8e0e..5409c296 100644 --- a/lib/screens/map_screen.dart +++ b/lib/screens/map_screen.dart @@ -565,6 +565,7 @@ class _MapScreenState extends State { TileLayer( urlTemplate: tileCache.urlTemplate, tileProvider: tileCache.tileProvider, + tileBuilder: tileCache.tileBuilder, userAgentPackageName: MapTileCacheService.userAgentPackageName, maxZoom: 19, diff --git a/lib/screens/path_trace_map.dart b/lib/screens/path_trace_map.dart index 8d4d469e..fdc83616 100644 --- a/lib/screens/path_trace_map.dart +++ b/lib/screens/path_trace_map.dart @@ -911,6 +911,7 @@ class _PathTraceMapScreenState extends State { TileLayer( urlTemplate: tileCache.urlTemplate, tileProvider: tileCache.tileProvider, + tileBuilder: tileCache.tileBuilder, userAgentPackageName: MapTileCacheService.userAgentPackageName, maxZoom: 19, ), diff --git a/lib/services/map_tile_cache_service.dart b/lib/services/map_tile_cache_service.dart index 0dccc7b2..6525106a 100644 --- a/lib/services/map_tile_cache_service.dart +++ b/lib/services/map_tile_cache_service.dart @@ -10,6 +10,7 @@ import 'app_settings_service.dart'; enum MapRasterSourcePreset { osmStandard('osm_standard'), + osmDark('osm_dark'), stamenTerrain('stamen_terrain'), alidadeSmoothDark('alidade_smooth_dark'), outdoors('outdoors'), @@ -86,6 +87,11 @@ class MapRasterSourceCatalog { label: 'OpenStreetMap Standard', description: 'Direct tiles from tile.openstreetmap.org', ); + static const MapRasterSourceDefinition osmDark = MapRasterSourceDefinition( + id: 'osm_dark', + label: 'OpenStreetMap Dark', + description: 'Standard OpenStreetMap tiles with an inverted dark filter', + ); static const MapRasterSourceDefinition stamenTerrain = MapRasterSourceDefinition( id: 'stamen_terrain', @@ -119,6 +125,7 @@ class MapRasterSourceCatalog { static const List presets = [ osmStandard, + osmDark, stamenTerrain, alidadeSmoothDark, outdoors, @@ -130,6 +137,8 @@ class MapRasterSourceCatalog { switch (preset) { case MapRasterSourcePreset.osmStandard: return osmStandard; + case MapRasterSourcePreset.osmDark: + return osmDark; case MapRasterSourcePreset.alidadeSmoothDark: return alidadeSmoothDark; case MapRasterSourcePreset.outdoors: @@ -279,6 +288,13 @@ class MapTileCacheService extends ChangeNotifier { String get urlTemplate => _buildUrlTemplate(appSettingsService.settings); + TileBuilder? get tileBuilder => isInvertedOsmDarkSource + ? _osmDarkTileBuilder + : null; + + bool get isInvertedOsmDarkSource => + source.id == MapRasterSourceCatalog.osmDark.id; + CacheManager get _concreteCacheManager => cacheManager as CacheManager; Map get defaultHeaders => { @@ -622,6 +638,30 @@ class MapTileCacheService extends ChangeNotifier { } } +Widget _osmDarkTileBuilder( + BuildContext _, + Widget tileWidget, + TileImage __, +) { + return ColorFiltered( + colorFilter: const ColorFilter.matrix([ + 1.33, 0, 0, 0, 0, + 0, 1.33, 0, 0, 0, + 0, 0, 1.33, 0, 0, + 0, 0, 0, 1, 0, + ]), + child: ColorFiltered( + colorFilter: const ColorFilter.matrix([ + 0.5740000009536743, -1.4299999475479126, -0.14399999380111694, 0, 255, + -0.4259999990463257, -0.429999977350235, -0.14399999380111694, 0, 255, + -0.4259999990463257, -1.4299999475479126, 0.8559999465942383, 0, 255, + 0, 0, 0, 1, 0, + ]), + child: tileWidget, + ), + ); +} + class CachedNetworkTileProvider extends TileProvider { final BaseCacheManager cacheManager;