Skip to content

Commit 77c91eb

Browse files
Fix TileLayer lag during fling/animated movement (#1247)
* Separate TileLayer in to multiple files for readability * Refactor TileLayer in to separate files/classes to make it more readable * Remove unnecessary code * Stop precalculating zindexes for levels, just calculate it during build as it's fast anyways and just complicates the code * Calculate tile translations during build Previously we listened to the movement stream, calculated the translations and then called setState(). This introduced noticible jank/lag where when flinging the map or moving it with an AnimatedController other layers (e.g. markers) would not move together with the map. * Fix tile sorting and level removing check * Final changes * Run dart format * Re-fix the tile ordering function, it was putting lower-zoom tiles. above higher zoom ones. * Add the StreamBuilder to trigger builds as a result of map movement. * Fix Tile tileReady callback race condition The Tile loading was initiated before adding the Tile to the TileManager which meant that with a very fast connection or cached Tile images the load callback would be called before the Tile was in the TileManager. Therefore when we tried to set the loaded value of the Tile in the callback we would not find the Tile and the Tile was never marked as loaded. This caused the tile to be removed sooner than it should be since we prune tiles that are not loaded yet when zooming in. * Small tidy-ups * Re-order TileManager functions to a more logical order * Move all TileLayer code to the tile_layer/ directory. Add Coords to the exports since it's needed for custom TileProvider implementations
1 parent 21cbef2 commit 77c91eb

18 files changed

+1567
-1494
lines changed

lib/flutter_map.dart

+10-5
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ export 'package:flutter_map/src/layer/marker_layer.dart';
3232
export 'package:flutter_map/src/layer/overlay_image_layer.dart';
3333
export 'package:flutter_map/src/layer/polygon_layer.dart';
3434
export 'package:flutter_map/src/layer/polyline_layer.dart';
35-
export 'package:flutter_map/src/layer/tile_builder/tile_builder.dart';
36-
export 'package:flutter_map/src/layer/tile_layer.dart';
37-
export 'package:flutter_map/src/layer/tile_provider/file_tile_provider_io.dart'
38-
if (dart.library.html) 'package:flutter_map/src/layer/tile_provider/file_tile_provider_web.dart';
39-
export 'package:flutter_map/src/layer/tile_provider/tile_provider.dart';
35+
export 'package:flutter_map/src/layer/tile_layer/coords.dart';
36+
export 'package:flutter_map/src/layer/tile_layer/tile.dart';
37+
export 'package:flutter_map/src/layer/tile_layer/tile_builder.dart';
38+
export 'package:flutter_map/src/layer/tile_layer/tile_layer.dart';
39+
export 'package:flutter_map/src/layer/tile_layer/tile_provider/file_tile_provider_io.dart'
40+
if (dart.library.html) 'package:flutter_map/src/layer/tile_layer/tile_provider/file_tile_provider_web.dart';
41+
export 'package:flutter_map/src/layer/tile_layer/tile_provider/tile_provider.dart';
4042
export 'package:flutter_map/src/plugins/plugin.dart';
4143

4244
/// Renders a map composed of a list of layers powered by [LayerOptions].
@@ -145,8 +147,11 @@ abstract class MapController {
145147
double get rotation;
146148

147149
Stream<MapEvent> get mapEventStream;
150+
148151
StreamSink<MapEvent> get mapEventSink;
152+
149153
set state(MapState state);
154+
150155
void dispose();
151156

152157
LatLng? pointToLatLng(CustomPoint point);

0 commit comments

Comments
 (0)