Skip to content

Commit 097f79a

Browse files
authored
chore: remove 'package:logger' dependency & OSM unblocking flow (#2185)
1 parent dc24088 commit 097f79a

File tree

13 files changed

+101
-175
lines changed

13 files changed

+101
-175
lines changed

.github/workflows/branch.yml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: "Branch & PR"
22
on:
33
push:
4-
branches: [ '!master' ]
4+
branches: ["!master"]
55
pull_request:
66
workflow_dispatch:
77

@@ -23,7 +23,8 @@ jobs:
2323
- name: Install pana
2424
run: dart pub global activate pana
2525
- name: Check package score
26-
run: pana --exit-code-threshold 0 .
26+
# we cannot reach the top score: we use logger that doesn't support wasm, so -10
27+
run: pana --exit-code-threshold 10 .
2728

2829
analyse-code:
2930
name: "Analyse Code"
@@ -49,7 +50,7 @@ jobs:
4950
strategy:
5051
fail-fast: false
5152
matrix:
52-
sdk: [ '3.27.0', '' ]
53+
sdk: ["3.27.0", ""]
5354
steps:
5455
- name: Checkout Repository
5556
uses: actions/checkout@v6
@@ -72,7 +73,7 @@ jobs:
7273
strategy:
7374
fail-fast: false
7475
matrix:
75-
sdk: [ '3.27.0', '' ]
76+
sdk: ["3.27.0", ""]
7677
defaults:
7778
run:
7879
working-directory: ./example
@@ -84,7 +85,7 @@ jobs:
8485
with:
8586
distribution: "temurin"
8687
java-version: "21"
87-
cache: 'gradle'
88+
cache: "gradle"
8889
- name: Setup Flutter Environment
8990
uses: subosito/flutter-action@v2
9091
with:
@@ -106,7 +107,7 @@ jobs:
106107
strategy:
107108
fail-fast: false
108109
matrix:
109-
sdk: [ '3.27.0', '' ]
110+
sdk: ["3.27.0", ""]
110111
defaults:
111112
run:
112113
working-directory: ./example
@@ -141,7 +142,7 @@ jobs:
141142
strategy:
142143
fail-fast: false
143144
matrix:
144-
sdk: [ '3.27.0', '' ]
145+
sdk: ["3.27.0", ""]
145146
defaults:
146147
run:
147148
working-directory: ./example
@@ -161,4 +162,4 @@ jobs:
161162
with:
162163
name: web-build
163164
path: example/build/web
164-
if-no-files-found: error
165+
if-no-files-found: error

benchmark/crs.dart

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
1+
// ignore_for_file: avoid_print
2+
13
import 'dart:async';
24
import 'dart:ui';
35

46
import 'package:flutter_map/src/geo/crs.dart';
57
import 'package:latlong2/latlong.dart';
6-
import 'package:logger/logger.dart';
7-
8-
class NoFilter extends LogFilter {
9-
@override
10-
bool shouldLog(LogEvent event) => true;
11-
}
128

139
typedef Result = ({
1410
String name,
1511
Duration duration,
1612
});
1713

1814
Future<Result> timedRun(String name, dynamic Function() body) async {
19-
Logger().i('running $name...');
15+
print('running $name...');
2016
final watch = Stopwatch()..start();
2117
await body();
2218
watch.stop();
@@ -29,10 +25,6 @@ Future<Result> timedRun(String name, dynamic Function() body) async {
2925
//
3026
// If you run in JIT mode, the resulting execution times will be a lot more similar.
3127
Future<void> main() async {
32-
Logger.level = Level.all;
33-
Logger.defaultFilter = NoFilter.new;
34-
Logger.defaultPrinter = SimplePrinter.new;
35-
3628
final results = <Result>[];
3729
const N = 100000000;
3830

@@ -103,5 +95,5 @@ Future<void> main() async {
10395
}));
10496
}
10597

106-
Logger().i('Results:\n${results.map((r) => r.toString()).join('\n')}');
98+
print('Results:\n${results.map((r) => r.toString()).join('\n')}');
10799
}

benchmark/point_in_polygon.dart

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
1+
// ignore_for_file: avoid_print
2+
13
import 'dart:async';
24
import 'dart:math' as math;
35
import 'dart:ui';
46

57
import 'package:flutter_map/src/misc/point_in_polygon.dart';
6-
import 'package:logger/logger.dart';
7-
8-
class NoFilter extends LogFilter {
9-
@override
10-
bool shouldLog(LogEvent event) => true;
11-
}
128

139
typedef Result = ({
1410
String name,
1511
Duration duration,
1612
});
1713

1814
Future<Result> timedRun(String name, dynamic Function() body) async {
19-
Logger().i('running $name...');
15+
print('running $name...');
2016
final watch = Stopwatch()..start();
2117
await body();
2218
watch.stop();
@@ -39,10 +35,6 @@ List<Offset> makeCircle(int points, double radius, double phase) {
3935
//
4036
// If you run in JIT mode, the resulting execution times will be a lot more similar.
4137
Future<void> main() async {
42-
Logger.level = Level.all;
43-
Logger.defaultFilter = NoFilter.new;
44-
Logger.defaultPrinter = SimplePrinter.new;
45-
4638
final results = <Result>[];
4739
const N = 3000000;
4840

@@ -72,5 +64,5 @@ Future<void> main() async {
7264
return noSir;
7365
}));
7466

75-
Logger().i('Results:\n${results.map((r) => r.toString()).join('\n')}');
67+
print('Results:\n${results.map((r) => r.toString()).join('\n')}');
7668
}

example/pubspec.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,18 +219,18 @@ packages:
219219
dependency: transitive
220220
description:
221221
name: matcher
222-
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
222+
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
223223
url: "https://pub.dev"
224224
source: hosted
225-
version: "0.12.17"
225+
version: "0.12.18"
226226
material_color_utilities:
227227
dependency: transitive
228228
description:
229229
name: material_color_utilities
230-
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
230+
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
231231
url: "https://pub.dev"
232232
source: hosted
233-
version: "0.11.1"
233+
version: "0.13.0"
234234
meta:
235235
dependency: transitive
236236
description:
@@ -456,10 +456,10 @@ packages:
456456
dependency: transitive
457457
description:
458458
name: test_api
459-
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
459+
sha256: "19a78f63e83d3a61f00826d09bc2f60e191bf3504183c001262be6ac75589fb8"
460460
url: "https://pub.dev"
461461
source: hosted
462-
version: "0.7.7"
462+
version: "0.7.8"
463463
typed_data:
464464
dependency: transitive
465465
description:

lib/src/gestures/map_interactive_viewer.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,8 @@ class MapInteractiveViewerState extends State<MapInteractiveViewer>
12431243
yield initManagerListeners(
12441244
manager: _keyboardZoomAnimationManager,
12451245
sum: _NumInfiniteSumAnimation.new,
1246-
onTick: (value) {
1246+
onTick: (valueParameter) {
1247+
num value = valueParameter;
12471248
if (_isZoomLeaping.value) {
12481249
value *= keyboardOptions.zoomLeapVelocityMultiplier;
12491250
}
@@ -1260,7 +1261,8 @@ class MapInteractiveViewerState extends State<MapInteractiveViewer>
12601261
yield initManagerListeners(
12611262
manager: _keyboardRotateAnimationManager,
12621263
sum: _NumInfiniteSumAnimation.new,
1263-
onTick: (value) {
1264+
onTick: (valueParameter) {
1265+
num value = valueParameter;
12641266
if (_isRotateLeaping.value) {
12651267
value *= keyboardOptions.rotateLeapVelocityMultiplier;
12661268
}

lib/src/layer/polygon_layer/polygon_layer.dart

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import 'package:flutter_map/src/misc/offsets.dart';
1414
import 'package:flutter_map/src/misc/point_in_polygon.dart';
1515
import 'package:flutter_map/src/misc/simplify.dart';
1616
import 'package:latlong2/latlong.dart' hide Path;
17-
import 'package:logger/logger.dart';
1817

1918
part 'label/build_text_painter.dart';
2019
part 'painter.dart';
@@ -164,13 +163,9 @@ class _PolygonLayerState<R extends Object> extends State<PolygonLayer<R>>
164163
kIsWeb &&
165164
oldWidget.invertedFill == null &&
166165
widget.invertedFill != null) {
167-
Logger(printer: PrettyPrinter(methodCount: 0)).w(
168-
'\x1B[1m\x1B[3mflutter_map\x1B[0m\nOn the web, inverted filling may '
169-
'not work as expected in some cases. It will not match the behaviour\n'
170-
'seen on native platforms.\nAvoid allowing polygons to intersect, and '
171-
'avoid using holes within polygons.\nThis is due to multiple '
172-
'limitations/bugs within Flutter.\nSee '
173-
'https://docs.fleaflet.dev/layers/polyline-layer#culling for more info.',
166+
// ignore: avoid_print
167+
print(
168+
''' \x1B[1;33m[flutter_map]\x1B[0;33m Inverting filling may not work correctly on web: https://docs.fleaflet.dev/layers/polygon-layer#inverted-filling''',
174169
);
175170
}
176171
}

lib/src/layer/tile_layer/tile_layer.dart

Lines changed: 38 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'dart:async';
22
import 'dart:math';
33

4-
import 'package:collection/collection.dart' show MapEquality, ListEquality;
4+
import 'package:collection/collection.dart';
55
import 'package:flutter/foundation.dart';
66
import 'package:flutter/material.dart';
77
import 'package:flutter_map/flutter_map.dart';
@@ -12,11 +12,9 @@ import 'package:flutter_map/src/layer/tile_layer/tile_image_manager.dart';
1212
import 'package:flutter_map/src/layer/tile_layer/tile_range.dart';
1313
import 'package:flutter_map/src/layer/tile_layer/tile_range_calculator.dart';
1414
import 'package:flutter_map/src/layer/tile_layer/tile_scale_calculator.dart';
15-
import 'package:flutter_map/src/layer/tile_layer/unblock_osm.dart';
1615
import 'package:flutter_map/src/misc/extensions.dart';
1716
import 'package:http/http.dart';
1817
import 'package:http/retry.dart';
19-
import 'package:logger/logger.dart';
2018

2119
part 'retina_mode.dart';
2220
part 'tile_error_evict_callback.dart';
@@ -322,48 +320,44 @@ class TileLayer extends StatefulWidget {
322320

323321
class _TileLayerState extends State<TileLayer> with TickerProviderStateMixin {
324322
static const _openStreetMapUrls = {'tile.openstreetmap.org', 'tile.osm.org'};
325-
bool get _isOpenStreetMapUrl =>
326-
widget.urlTemplate != null &&
327-
_openStreetMapUrls.any(widget.urlTemplate!.contains);
328-
329-
static const _unblockOSMEnvVar =
330-
String.fromEnvironment('flutter.flutter_map.unblockOSM');
331-
static bool get _shouldUnblockOSM => const ListEquality<int>()
332-
.equals(_unblockOSMEnvVar.codeUnits, osmUnblockingString);
333-
334-
late final hasSetGoodUserAgent =
335-
widget.tileProvider.headers['User-Agent'] != 'flutter_map (unknown)';
336-
late final _blockOpenStreetMapUrl =
337-
false /*&&
338-
_isOpenStreetMapUrl &&
339-
!hasSetGoodUserAgent &&
340-
!kDebugMode &&
341-
!_shouldUnblockOSM*/
342-
;
323+
343324
void _warnOpenStreetMapUrl() {
344-
if (_isOpenStreetMapUrl && kDebugMode && !_shouldUnblockOSM) {
345-
final uaWarning = hasSetGoodUserAgent
346-
? ''
347-
: '''
348-
349-
When using the OSM tile servers, you must set an HTTP User-Agent which
350-
adequately identifies your application to the servers.
351-
Set `TileLayer.userAgentPackageName` appropriately, or set a UA header manually.
352-
OSMF (the tile server operators), and/or flutter_map in future, may block usage
353-
if inadequately identified.
354-
''';
355-
356-
final warning = '''\x1B[1m\x1B[3mflutter_map\x1B[0m$uaWarning
357-
flutter_map wants to help keep map data available for everyone.
358-
We use the OpenStreetMap public tile servers in our code examples & demo app,
359-
but they are NOT free to use by everyone. Please review whether OSM's tile
360-
servers are appropriate and the best choice for your app.
361-
See:
362-
* https://operations.osmfoundation.org/policies/tiles (OSM Tile Usage Policy)
363-
* https://docs.fleaflet.dev/osm-warn for more information about this warning''';
364-
365-
Logger(printer: PrettyPrinter(methodCount: 0))
366-
.log(hasSetGoodUserAgent ? Level.info : Level.warning, warning);
325+
if (!kDebugMode) return;
326+
327+
final isOSMUrl = widget.urlTemplate != null &&
328+
_openStreetMapUrls.any(widget.urlTemplate!.contains);
329+
330+
if (!isOSMUrl) return;
331+
332+
final hasSetGoodUserAgent =
333+
widget.tileProvider.headers['User-Agent'] != 'flutter_map (unknown)';
334+
335+
final hasSubdomainPart = widget.urlTemplate!.contains('{s}');
336+
337+
// ignore: avoid_print
338+
print(''' \x1B[1m[flutter_map]\x1B[0m
339+
We want to help keep OpenStreetMap available for everyone. Our examples
340+
and demo app use the public tile servers, but they are NOT free to use by
341+
everyone! Please review whether the OpenStreetMap tile servers are suitable
342+
for your project.
343+
See:
344+
* https://operations.osmfoundation.org/policies/tiles (OSM Tile Usage Policy)
345+
* https://docs.fleaflet.dev/osm-warn for more information about this warning''');
346+
347+
if (!hasSetGoodUserAgent) {
348+
// ignore: avoid_print
349+
print('''\x1B[0;33m ---
350+
\x1B[0;33mIt looks like you haven't set an adequate HTTP User-Agent, for example through
351+
\x1B[0;33mthe `TileLayer.userAgentPackageName` argument. This may lead to your project
352+
\x1B[0;33mbeing blocked.''');
353+
}
354+
355+
if (hasSubdomainPart) {
356+
// ignore: avoid_print
357+
print('''\x1B[0;33m ---
358+
\x1B[0;33mAvoid using subdomains with the OpenStreetMap public tile server. Support may
359+
\x1B[0;33mbecome slow or be removed in future.
360+
\x1B[0;33mSee https://github.com/openstreetmap/operations/issues/737 for more info.''');
367361
}
368362
}
369363

@@ -396,19 +390,6 @@ See:
396390
_resetSub = widget.reset?.listen(_resetStreamHandler);
397391
_tileRangeCalculator = TileRangeCalculator(tileDimension: _tileDimension);
398392
_warnOpenStreetMapUrl();
399-
400-
// These log strong hints in debug mode, which is more visible to users than
401-
// just documentation - they should only be used where there is a specific
402-
// and large risk of the user doing something wrong.
403-
if (kDebugMode &&
404-
widget.urlTemplate != null &&
405-
widget.urlTemplate!.contains('{s}.tile.openstreetmap.org')) {
406-
Logger(printer: PrettyPrinter(methodCount: 0)).w(
407-
'\x1B[1m\x1B[3mflutter_map\x1B[0m\nAvoid using subdomains with OSM\'s tile '
408-
'server. Support may be become slow or be removed in future.\nSee '
409-
'https://github.com/openstreetmap/operations/issues/737 for more info.',
410-
);
411-
}
412393
}
413394

414395
// This is called on every map movement so we should avoid expensive logic
@@ -543,10 +524,6 @@ See:
543524

544525
if (_outsideZoomLimits(map.zoom.round())) return const SizedBox.shrink();
545526

546-
if (_blockOpenStreetMapUrl) {
547-
return const SizedBox.shrink();
548-
}
549-
550527
final tileZoom = _clampToNativeZoom(map.zoom);
551528
final tileBoundsAtZoom = _tileBounds.atZoom(tileZoom);
552529
final visibleTileRange = _tileRangeCalculator.calculate(
@@ -709,10 +686,6 @@ See:
709686
DiscreteTileRange tileLoadRange, {
710687
required bool pruneAfterLoad,
711688
}) {
712-
if (_isOpenStreetMapUrl && _blockOpenStreetMapUrl) {
713-
return;
714-
}
715-
716689
final tileZoom = tileLoadRange.zoom;
717690
final expandedTileLoadRange = tileLoadRange.expand(widget.panBuffer);
718691

0 commit comments

Comments
 (0)