Skip to content

Commit

Permalink
Merge pull request #47 from JaffaKetchup/fm-v8
Browse files Browse the repository at this point in the history
Support flutter_map v8
  • Loading branch information
TesteurManiak authored Feb 3, 2025
2 parents 52a5f56 + 7b6d5f2 commit ed94426
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 87 deletions.
98 changes: 53 additions & 45 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,42 +5,42 @@ packages:
dependency: transitive
description:
name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
url: "https://pub.dev"
source: hosted
version: "2.11.0"
version: "2.12.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
characters:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "1.4.0"
clock:
dependency: transitive
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
version: "1.18.0"
version: "1.19.1"
dart_earcut:
dependency: transitive
description:
Expand All @@ -53,18 +53,26 @@ packages:
dependency: transitive
description:
name: dio
sha256: "49af28382aefc53562459104f64d16b9dfd1e8ef68c862d5af436cc8356ce5a8"
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
url: "https://pub.dev"
source: hosted
version: "5.8.0+1"
dio_web_adapter:
dependency: transitive
description:
name: dio_web_adapter
sha256: e485c7a39ff2b384fa1d7e09b4e25f755804de8384358049124830b04fc4f93a
url: "https://pub.dev"
source: hosted
version: "5.4.1"
version: "2.1.0"
fake_async:
dependency: transitive
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
version: "1.3.2"
flutter:
dependency: "direct main"
description: flutter
Expand All @@ -82,10 +90,10 @@ packages:
dependency: "direct main"
description:
name: flutter_map
sha256: ead3532d99548140346684cf737a4c0a6f59f02f62ee4e406597f8364afbf1a2
sha256: "82786b8e1ffbff079487eeeed59a34e8a0b09896dd7713d8e1dc193d673496b5"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
version: "8.0.0"
flutter_map_animations:
dependency: "direct main"
description:
Expand All @@ -97,10 +105,10 @@ packages:
dependency: "direct main"
description:
name: flutter_map_cancellable_tile_provider
sha256: "3841389102c4b05a6d6449ede6d4319b2a191dcd6a2631775d6d9ef632113adc"
sha256: "801760c104a3cfd9268cda7c9b1241223247e8182613a7e060ef4ffc0d825ac8"
url: "https://pub.dev"
source: hosted
version: "3.0.0-dev.1"
version: "3.1.0"
flutter_test:
dependency: "direct dev"
description: flutter
Expand Down Expand Up @@ -142,18 +150,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
url: "https://pub.dev"
source: hosted
version: "10.0.5"
version: "10.0.8"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.5"
version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
Expand Down Expand Up @@ -190,10 +198,10 @@ packages:
dependency: transitive
description:
name: matcher
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
version: "0.12.16+1"
version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
Expand All @@ -206,10 +214,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
version: "1.15.0"
version: "1.16.0"
mgrs_dart:
dependency: transitive
description:
Expand All @@ -222,10 +230,10 @@ packages:
dependency: transitive
description:
name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
polylabel:
dependency: transitive
description:
Expand All @@ -246,55 +254,55 @@ packages:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.10.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
string_scanner:
dependency: transitive
description:
name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.2"
version: "0.7.4"
typed_data:
dependency: transitive
description:
Expand Down Expand Up @@ -323,10 +331,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
url: "https://pub.dev"
source: hosted
version: "14.2.5"
version: "14.3.1"
web:
dependency: transitive
description:
Expand All @@ -344,5 +352,5 @@ packages:
source: hosted
version: "2.0.0"
sdks:
dart: ">=3.3.0 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
dart: ">=3.7.0-0 <4.0.0"
flutter: ">=3.27.0"
7 changes: 2 additions & 5 deletions example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,17 @@ environment:
dependencies:
flutter:
sdk: flutter
flutter_map: ^7.0.0
flutter_map: ^8.0.0
flutter_map_animations:
path: ../
flutter_map_cancellable_tile_provider: ^3.0.0-dev.1
flutter_map_cancellable_tile_provider: ^3.1.0
latlong2: ^0.9.1

dev_dependencies:
flutter_lints: ^4.0.0
flutter_test:
sdk: flutter

dependency_overrides:
flutter_map: ^7.0.0-dev.1

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter packages.
Expand Down
91 changes: 60 additions & 31 deletions lib/src/animated_marker_layer.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_animations/src/animated_marker.dart';
Expand All @@ -21,11 +19,13 @@ class AnimatedMarkerLayer extends StatelessWidget {

@override
Widget build(BuildContext context) {
final mapCamera = MapCamera.maybeOf(context);
if (mapCamera == null) {
final map = MapCamera.maybeOf(context);
if (map == null) {
throw StateError('No FlutterMapState found.');
}
final worldWidth = map.getWorldWidthAtZoom();

// Copies `MarkerLayer` implementation
return MobileLayerTransformer(
child: Stack(
children: (List<AnimatedMarker> markers) sync* {
Expand All @@ -37,33 +37,62 @@ class AnimatedMarkerLayer extends StatelessWidget {
final bottom = m.height - top;

// Perform projection
final pxPoint = mapCamera.project(m.point);

// Cull if out of bounds
if (!mapCamera.pixelBounds.containsPartialBounds(
Bounds(
Point(pxPoint.x + left, pxPoint.y - bottom),
Point(pxPoint.x - right, pxPoint.y + top),
),
)) continue;

// Apply map camera to marker position
final pos = pxPoint - mapCamera.pixelOrigin.toDoublePoint();

yield Positioned(
key: m.key,
width: m.width,
height: m.height,
left: pos.x - right,
top: pos.y - bottom,
child: (m.rotate ?? rotate)
? Transform.rotate(
angle: -mapCamera.rotationRad,
alignment: (m.alignment ?? alignment) * -1,
child: _AnimatedMarkerWidget(marker: m),
)
: _AnimatedMarkerWidget(marker: m),
);
final pxPoint = map.projectAtZoom(m.point);

Positioned? getPositioned(double worldShift) {
final shiftedX = pxPoint.dx + worldShift;

// Cull if out of bounds
if (!map.pixelBounds.overlaps(
Rect.fromPoints(
Offset(shiftedX + left, pxPoint.dy - bottom),
Offset(shiftedX - right, pxPoint.dy + top),
),
)) {
return null;
}

// Shift original coordinate along worlds, then move into relative
// to origin space
final shiftedLocalPoint =
Offset(shiftedX, pxPoint.dy) - map.pixelOrigin;

return Positioned(
key: m.key,
width: m.width,
height: m.height,
left: shiftedLocalPoint.dx - right,
top: shiftedLocalPoint.dy - bottom,
child: (m.rotate ?? rotate)
? Transform.rotate(
angle: -map.rotationRad,
alignment: (m.alignment ?? alignment) * -1,
child: _AnimatedMarkerWidget(marker: m),
)
: _AnimatedMarkerWidget(marker: m),
);
}

// Create marker in main world, unless culled
final main = getPositioned(0);
if (main != null) yield main;
// It is unsafe to assume that if the main one is culled, it will
// also be culled in all other worlds, so we must continue

// Repeat over all worlds (<--||-->) until culling determines that
// that marker is out of view, and therefore all further markers in
// that direction will also be
if (worldWidth == 0) continue;
for (double shift = -worldWidth;; shift -= worldWidth) {
final additional = getPositioned(shift);
if (additional == null) break;
yield additional;
}
for (double shift = worldWidth;; shift += worldWidth) {
final additional = getPositioned(shift);
if (additional == null) break;
yield additional;
}
}
}(markers)
.toList(),
Expand Down
Loading

0 comments on commit ed94426

Please sign in to comment.