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

Commit 90b2844

Browse files
[google_maps_flutter_web] Add Marker drag events (#4385)
1 parent a1304ef commit 90b2844

File tree

10 files changed

+111
-13
lines changed

10 files changed

+111
-13
lines changed

packages/google_maps_flutter/google_maps_flutter_web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.3.2
2+
3+
Add `onDragStart` and `onDrag` to `Marker`
4+
15
## 0.3.1
26

37
* Fix the `getScreenCoordinate(LatLng)` method. [#80710](https://github.com/flutter/flutter/issues/80710)

packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_controller_test.mocks.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// Copyright 2013 The Flutter Authors. All rights reserved.
2-
// Use of this source code is governed by a BSD-style license that can be
3-
// found in the LICENSE file.
4-
5-
// Mocks generated by Mockito 5.0.15 from annotations
1+
// Mocks generated by Mockito 5.0.16 from annotations
62
// in google_maps_flutter_web_integration_tests/integration_test/google_maps_controller_test.dart.
73
// Do not manually edit this file.
84

@@ -19,6 +15,7 @@ import 'package:mockito/mockito.dart' as _i1;
1915
// ignore_for_file: invalid_use_of_visible_for_testing_member
2016
// ignore_for_file: prefer_const_constructors
2117
// ignore_for_file: unnecessary_parenthesis
18+
// ignore_for_file: camel_case_types
2219

2320
class _FakeGMap_0 extends _i1.Fake implements _i2.GMap {}
2421

packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,28 @@ void main() {
404404

405405
await _testStreamFiltering(stream, event);
406406
});
407+
testWidgets('onMarkerDragStart', (WidgetTester tester) async {
408+
final event = MarkerDragStartEvent(
409+
mapId,
410+
LatLng(43.3677, -5.8372),
411+
MarkerId('test-123'),
412+
);
413+
414+
final stream = plugin.onMarkerDragStart(mapId: mapId);
415+
416+
await _testStreamFiltering(stream, event);
417+
});
418+
testWidgets('onMarkerDrag', (WidgetTester tester) async {
419+
final event = MarkerDragEvent(
420+
mapId,
421+
LatLng(43.3677, -5.8372),
422+
MarkerId('test-123'),
423+
);
424+
425+
final stream = plugin.onMarkerDrag(mapId: mapId);
426+
427+
await _testStreamFiltering(stream, event);
428+
});
407429
testWidgets('onMarkerDragEnd', (WidgetTester tester) async {
408430
final event = MarkerDragEndEvent(
409431
mapId,

packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/google_maps_plugin_test.mocks.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
// Copyright 2013 The Flutter Authors. All rights reserved.
2-
// Use of this source code is governed by a BSD-style license that can be
3-
// found in the LICENSE file.
4-
5-
// Mocks generated by Mockito 5.0.15 from annotations
1+
// Mocks generated by Mockito 5.0.16 from annotations
62
// in google_maps_flutter_web_integration_tests/integration_test/google_maps_plugin_test.dart.
73
// Do not manually edit this file.
84

@@ -20,6 +16,7 @@ import 'package:mockito/mockito.dart' as _i1;
2016
// ignore_for_file: invalid_use_of_visible_for_testing_member
2117
// ignore_for_file: prefer_const_constructors
2218
// ignore_for_file: unnecessary_parenthesis
19+
// ignore_for_file: camel_case_types
2320

2421
class _FakeStreamController_0<T> extends _i1.Fake
2522
implements _i2.StreamController<T> {}

packages/google_maps_flutter/google_maps_flutter_web/example/integration_test/marker_test.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ void main() {
2727
_methodCalledCompleter.complete(true);
2828
}
2929

30+
void onDragStart(gmaps.LatLng _) {
31+
_methodCalledCompleter.complete(true);
32+
}
33+
34+
void onDrag(gmaps.LatLng _) {
35+
_methodCalledCompleter.complete(true);
36+
}
37+
3038
void onDragEnd(gmaps.LatLng _) {
3139
_methodCalledCompleter.complete(true);
3240
}
@@ -53,6 +61,26 @@ void main() {
5361
expect(await methodCalled, isTrue);
5462
});
5563

64+
testWidgets('onDragStart gets called', (WidgetTester tester) async {
65+
MarkerController(marker: marker, onDragStart: onDragStart);
66+
67+
// Trigger a drag end event...
68+
gmaps.Event.trigger(marker, 'dragstart',
69+
[gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);
70+
71+
expect(await methodCalled, isTrue);
72+
});
73+
74+
testWidgets('onDrag gets called', (WidgetTester tester) async {
75+
MarkerController(marker: marker, onDrag: onDrag);
76+
77+
// Trigger a drag end event...
78+
gmaps.Event.trigger(
79+
marker, 'drag', [gmaps.MapMouseEvent()..latLng = gmaps.LatLng(0, 0)]);
80+
81+
expect(await methodCalled, isTrue);
82+
});
83+
5684
testWidgets('onDragEnd gets called', (WidgetTester tester) async {
5785
MarkerController(marker: marker, onDragEnd: onDragEnd);
5886

packages/google_maps_flutter/google_maps_flutter_web/example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ publish_to: none
44
# Tests require flutter beta or greater to run.
55
environment:
66
sdk: ">=2.12.0 <3.0.0"
7-
flutter: ">=2.1.0"
7+
flutter: ">=2.1.0"
88

99
dependencies:
1010
google_maps_flutter_web:

packages/google_maps_flutter/google_maps_flutter_web/lib/src/google_maps_flutter_web.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,16 @@ class GoogleMapsPlugin extends GoogleMapsFlutterPlatform {
240240
return _events(mapId).whereType<InfoWindowTapEvent>();
241241
}
242242

243+
@override
244+
Stream<MarkerDragStartEvent> onMarkerDragStart({required int mapId}) {
245+
return _events(mapId).whereType<MarkerDragStartEvent>();
246+
}
247+
248+
@override
249+
Stream<MarkerDragEvent> onMarkerDrag({required int mapId}) {
250+
return _events(mapId).whereType<MarkerDragEvent>();
251+
}
252+
243253
@override
244254
Stream<MarkerDragEndEvent> onMarkerDragEnd({required int mapId}) {
245255
return _events(mapId).whereType<MarkerDragEndEvent>();

packages/google_maps_flutter/google_maps_flutter_web/lib/src/marker.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class MarkerController {
1919
required gmaps.Marker marker,
2020
gmaps.InfoWindow? infoWindow,
2121
bool consumeTapEvents = false,
22+
LatLngCallback? onDragStart,
23+
LatLngCallback? onDrag,
2224
LatLngCallback? onDragEnd,
2325
ui.VoidCallback? onTap,
2426
}) : _marker = marker,
@@ -29,6 +31,22 @@ class MarkerController {
2931
onTap.call();
3032
});
3133
}
34+
if (onDragStart != null) {
35+
marker.onDragstart.listen((event) {
36+
if (marker != null) {
37+
marker.position = event.latLng;
38+
}
39+
onDragStart.call(event.latLng ?? _nullGmapsLatLng);
40+
});
41+
}
42+
if (onDrag != null) {
43+
marker.onDrag.listen((event) {
44+
if (marker != null) {
45+
marker.position = event.latLng;
46+
}
47+
onDrag.call(event.latLng ?? _nullGmapsLatLng);
48+
});
49+
}
3250
if (onDragEnd != null) {
3351
marker.onDragend.listen((event) {
3452
if (marker != null) {

packages/google_maps_flutter/google_maps_flutter_web/lib/src/markers.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ class MarkersController extends GeometryController {
6262
this.showMarkerInfoWindow(marker.markerId);
6363
_onMarkerTap(marker.markerId);
6464
},
65+
onDragStart: (gmaps.LatLng latLng) {
66+
_onMarkerDragStart(marker.markerId, latLng);
67+
},
68+
onDrag: (gmaps.LatLng latLng) {
69+
_onMarkerDrag(marker.markerId, latLng);
70+
},
6571
onDragEnd: (gmaps.LatLng latLng) {
6672
_onMarkerDragEnd(marker.markerId, latLng);
6773
},
@@ -140,6 +146,22 @@ class MarkersController extends GeometryController {
140146
_streamController.add(InfoWindowTapEvent(mapId, markerId));
141147
}
142148

149+
void _onMarkerDragStart(MarkerId markerId, gmaps.LatLng latLng) {
150+
_streamController.add(MarkerDragStartEvent(
151+
mapId,
152+
_gmLatLngToLatLng(latLng),
153+
markerId,
154+
));
155+
}
156+
157+
void _onMarkerDrag(MarkerId markerId, gmaps.LatLng latLng) {
158+
_streamController.add(MarkerDragEvent(
159+
mapId,
160+
_gmLatLngToLatLng(latLng),
161+
markerId,
162+
));
163+
}
164+
143165
void _onMarkerDragEnd(MarkerId markerId, gmaps.LatLng latLng) {
144166
_streamController.add(MarkerDragEndEvent(
145167
mapId,

packages/google_maps_flutter/google_maps_flutter_web/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: google_maps_flutter_web
22
description: Web platform implementation of google_maps_flutter
33
repository: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter_web
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22
5-
version: 0.3.1
5+
version: 0.3.2
66

77
environment:
88
sdk: ">=2.12.0 <3.0.0"
@@ -21,7 +21,7 @@ dependencies:
2121
sdk: flutter
2222
flutter_web_plugins:
2323
sdk: flutter
24-
google_maps_flutter_platform_interface: ^2.0.1
24+
google_maps_flutter_platform_interface: ^2.1.2
2525
google_maps: ^5.2.0
2626
meta: ^1.3.0
2727
sanitize_html: ^2.0.0

0 commit comments

Comments
 (0)