Skip to content

Commit b5056c0

Browse files
fix: build errored tile without error image using custom tile builder (#2166)
1 parent 108d187 commit b5056c0

File tree

4 files changed

+50
-6
lines changed

4 files changed

+50
-6
lines changed

example/lib/main.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import 'package:flutter_map_example/pages/secondary_tap.dart';
3030
import 'package:flutter_map_example/pages/single_world_polys.dart';
3131
import 'package:flutter_map_example/pages/sliding_map.dart';
3232
import 'package:flutter_map_example/pages/tile_builder.dart';
33+
import 'package:flutter_map_example/pages/tile_error.dart';
3334
import 'package:flutter_map_example/pages/tile_loading_error_handle.dart';
3435
import 'package:flutter_map_example/pages/wms_tile_layer.dart';
3536
import 'package:flutter_web_plugins/url_strategy.dart';
@@ -76,6 +77,7 @@ class MyApp extends StatelessWidget {
7677
TileLoadingErrorHandle.route: (context) =>
7778
const TileLoadingErrorHandle(),
7879
TileBuilderPage.route: (context) => const TileBuilderPage(),
80+
ErrorTileBuilder.route: (context) => const ErrorTileBuilder(),
7981
InteractiveFlagsPage.route: (context) => const InteractiveFlagsPage(),
8082
ManyMarkersPage.route: (context) => const ManyMarkersPage(),
8183
MapInsideListViewPage.route: (context) => const MapInsideListViewPage(),

example/lib/pages/tile_error.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_map/flutter_map.dart';
3+
import 'package:flutter_map_example/widgets/drawer/menu_drawer.dart';
4+
5+
/// Example of tile loading systematically failing.
6+
class ErrorTileBuilder extends StatelessWidget {
7+
static const String route = '/error_tile_builder';
8+
9+
const ErrorTileBuilder({super.key});
10+
11+
@override
12+
Widget build(BuildContext context) {
13+
return Scaffold(
14+
appBar: AppBar(title: const Text('Error Tile Builder')),
15+
drawer: const MenuDrawer(ErrorTileBuilder.route),
16+
body: FlutterMap(
17+
options: const MapOptions(
18+
initialZoom: 3,
19+
),
20+
children: [
21+
TileLayer(
22+
// obviously wrong url template
23+
urlTemplate: 'https://example.com/{z}/{y}/{x}',
24+
tileBuilder: (context, tileWidget, tile) {
25+
if (tile.loadError) {
26+
return Center(
27+
child: Text('${tile.coordinates.z}'
28+
'/'
29+
'${tile.coordinates.x}'
30+
'/'
31+
'${tile.coordinates.y}'),
32+
);
33+
}
34+
return tileWidget;
35+
},
36+
),
37+
],
38+
),
39+
);
40+
}
41+
}

example/lib/widgets/drawer/menu_drawer.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import 'package:flutter_map_example/pages/secondary_tap.dart';
3434
import 'package:flutter_map_example/pages/single_world_polys.dart';
3535
import 'package:flutter_map_example/pages/sliding_map.dart';
3636
import 'package:flutter_map_example/pages/tile_builder.dart';
37+
import 'package:flutter_map_example/pages/tile_error.dart';
3738
import 'package:flutter_map_example/pages/tile_loading_error_handle.dart';
3839
import 'package:flutter_map_example/pages/wms_tile_layer.dart';
3940
import 'package:flutter_map_example/widgets/drawer/menu_item.dart';
@@ -280,6 +281,11 @@ class MenuDrawer extends StatelessWidget {
280281
routeName: TileBuilderPage.route,
281282
currentRoute: currentRoute,
282283
),
284+
MenuItemWidget(
285+
caption: 'Custom Error Tile Builder',
286+
routeName: ErrorTileBuilder.route,
287+
currentRoute: currentRoute,
288+
),
283289
MenuItemWidget(
284290
caption: 'Retina Tile Layer',
285291
routeName: RetinaPage.route,

lib/src/layer/tile_layer/tile_image.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class TileImage extends ChangeNotifier {
170170
loadError = true;
171171

172172
if (!_disposed) {
173-
if (errorImage != null) _display();
173+
_display();
174174
onLoadError(this, exception, stackTrace);
175175
onLoadComplete(coordinates);
176176
}
@@ -184,11 +184,6 @@ class TileImage extends ChangeNotifier {
184184
loadFinishedAt = DateTime.now();
185185

186186
if (loadError) {
187-
assert(
188-
errorImage != null,
189-
'A TileImage should not be displayed if loading errors and there is no '
190-
'errorImage to show.',
191-
);
192187
_readyToDisplay = true;
193188
if (!_disposed) notifyListeners();
194189
return;

0 commit comments

Comments
 (0)