Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 72ca4b1

Browse files
committed
Add drag event to platform interface
1 parent 50f9ee9 commit 72ca4b1

File tree

6 files changed

+70
-1
lines changed

6 files changed

+70
-1
lines changed

packages/google_maps_flutter/google_maps_flutter_platform_interface/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 2.0.5
2+
3+
* Add additional marker drag events
14
## 2.0.4
25

36
* Preserve the `TileProvider` when copying `TileOverlay`, fixing a

packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/events/map_event.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,26 @@ class InfoWindowTapEvent extends MapEvent<MarkerId> {
102102
InfoWindowTapEvent(int mapId, MarkerId markerId) : super(mapId, markerId);
103103
}
104104

105+
/// An event fired when a [Marker] is starting to be dragged to a new [LatLng].
106+
class MarkerDragStartEvent extends _PositionedMapEvent<MarkerId> {
107+
/// Build a MarkerDragStar Event triggered from the map represented by `mapId`.
108+
///
109+
/// The `position` on this event is the [LatLng] on which the Marker was picked up from.
110+
/// The `value` of this event is a [MarkerId] object that represents the Marker.
111+
MarkerDragStartEvent(int mapId, LatLng position, MarkerId markerId)
112+
: super(mapId, position, markerId);
113+
}
114+
115+
/// An event fired when a [Marker] is being dragged to a new [LatLng].
116+
class MarkerDragEvent extends _PositionedMapEvent<MarkerId> {
117+
/// Build a MarkerDrag Event triggered from the map represented by `mapId`.
118+
///
119+
/// The `position` on this event is the [LatLng] on which the Marker was dragged to.
120+
/// The `value` of this event is a [MarkerId] object that represents the Marker.
121+
MarkerDragEvent(int mapId, LatLng position, MarkerId markerId)
122+
: super(mapId, position, markerId);
123+
}
124+
105125
/// An event fired when a [Marker] is dragged to a new [LatLng].
106126
class MarkerDragEndEvent extends _PositionedMapEvent<MarkerId> {
107127
/// Build a MarkerDragEnd Event triggered from the map represented by `mapId`.

packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/method_channel/method_channel_google_maps_flutter.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,16 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform {
123123
return _events(mapId).whereType<InfoWindowTapEvent>();
124124
}
125125

126+
@override
127+
Stream<MarkerDragStartEvent> onMarkerDragStart({required int mapId}) {
128+
return _events(mapId).whereType<MarkerDragStartEvent>();
129+
}
130+
131+
@override
132+
Stream<MarkerDragEvent> onMarkerDrag({required int mapId}) {
133+
return _events(mapId).whereType<MarkerDragEvent>();
134+
}
135+
126136
@override
127137
Stream<MarkerDragEndEvent> onMarkerDragEnd({required int mapId}) {
128138
return _events(mapId).whereType<MarkerDragEndEvent>();
@@ -173,6 +183,20 @@ class MethodChannelGoogleMapsFlutter extends GoogleMapsFlutterPlatform {
173183
MarkerId(call.arguments['markerId']),
174184
));
175185
break;
186+
case 'marker#onDragStart':
187+
_mapEventStreamController.add(MarkerDragStartEvent(
188+
mapId,
189+
LatLng.fromJson(call.arguments['position'])!,
190+
MarkerId(call.arguments['markerId']),
191+
));
192+
break;
193+
case 'marker#onDrag':
194+
_mapEventStreamController.add(MarkerDragEvent(
195+
mapId,
196+
LatLng.fromJson(call.arguments['position'])!,
197+
MarkerId(call.arguments['markerId']),
198+
));
199+
break;
176200
case 'marker#onDragEnd':
177201
_mapEventStreamController.add(MarkerDragEndEvent(
178202
mapId,

packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/platform_interface/google_maps_flutter_platform.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,16 @@ abstract class GoogleMapsFlutterPlatform extends PlatformInterface {
303303
throw UnimplementedError('onInfoWindowTap() has not been implemented.');
304304
}
305305

306+
/// A [Marker] has been dragged to a different [LatLng] position.
307+
Stream<MarkerDragStartEvent> onMarkerDragStart({required int mapId}) {
308+
throw UnimplementedError('onMarkerDragEnd() has not been implemented.');
309+
}
310+
311+
/// A [Marker] has been dragged to a different [LatLng] position.
312+
Stream<MarkerDragEvent> onMarkerDrag({required int mapId}) {
313+
throw UnimplementedError('onMarkerDragEnd() has not been implemented.');
314+
}
315+
306316
/// A [Marker] has been dragged to a different [LatLng] position.
307317
Stream<MarkerDragEndEvent> onMarkerDragEnd({required int mapId}) {
308318
throw UnimplementedError('onMarkerDragEnd() has not been implemented.');

packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/marker.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ class Marker implements MapsObject {
147147
this.visible = true,
148148
this.zIndex = 0.0,
149149
this.onTap,
150+
this.onDrag,
151+
this.onDragStart,
150152
this.onDragEnd,
151153
}) : assert(alpha == null || (0.0 <= alpha && alpha <= 1.0));
152154

@@ -207,9 +209,15 @@ class Marker implements MapsObject {
207209
/// Callbacks to receive tap events for markers placed on this map.
208210
final VoidCallback? onTap;
209211

212+
/// Signature reporting the new [LatLng] at the start of a drag event.
213+
final ValueChanged<LatLng>? onDragStart;
214+
210215
/// Signature reporting the new [LatLng] at the end of a drag event.
211216
final ValueChanged<LatLng>? onDragEnd;
212217

218+
/// Signature reporting the new [LatLng] during the drag event.
219+
final ValueChanged<LatLng>? onDrag;
220+
213221
/// Creates a new [Marker] object whose values are the same as this instance,
214222
/// unless overwritten by the specified parameters.
215223
Marker copyWith({
@@ -225,6 +233,8 @@ class Marker implements MapsObject {
225233
bool? visibleParam,
226234
double? zIndexParam,
227235
VoidCallback? onTapParam,
236+
ValueChanged<LatLng>? onDragStartParam,
237+
ValueChanged<LatLng>? onDragParam,
228238
ValueChanged<LatLng>? onDragEndParam,
229239
}) {
230240
return Marker(
@@ -241,6 +251,8 @@ class Marker implements MapsObject {
241251
visible: visibleParam ?? visible,
242252
zIndex: zIndexParam ?? zIndex,
243253
onTap: onTapParam ?? onTap,
254+
onDragStart: onDragStartParam ?? onDragStart,
255+
onDrag: onDragParam ?? onDrag,
244256
onDragEnd: onDragEndParam ?? onDragEnd,
245257
);
246258
}

packages/google_maps_flutter/google_maps_flutter_platform_interface/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ description: A common platform interface for the google_maps_flutter plugin.
33
homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_platform_interface
44
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
55
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
6-
version: 2.0.4
6+
version: 2.0.5
77

88
dependencies:
99
flutter:

0 commit comments

Comments
 (0)