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

Commit fde80a9

Browse files
author
Chris Yang
authored
[google_maps_flutter] fix crash and remove listeners (#2704)
1 parent 531ff2b commit fde80a9

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.5.26+4
2+
3+
* Android: Fix map view crash when "exit app" while using `FragmentActivity`.
4+
* Android: Remove listeners from `GoogleMap` when disposing.
5+
16
## 0.5.26+3
27

38
* iOS: observe the bounds update for the `GMSMapView` to reset the camera setting.

packages/google_maps_flutter/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import android.util.Log;
2424
import android.view.View;
2525
import androidx.annotation.NonNull;
26+
import androidx.annotation.Nullable;
2627
import androidx.lifecycle.DefaultLifecycleObserver;
2728
import androidx.lifecycle.Lifecycle;
2829
import androidx.lifecycle.LifecycleOwner;
@@ -59,20 +60,10 @@ final class GoogleMapController
5960
implements Application.ActivityLifecycleCallbacks,
6061
DefaultLifecycleObserver,
6162
ActivityPluginBinding.OnSaveInstanceStateListener,
62-
GoogleMap.OnCameraIdleListener,
63-
GoogleMap.OnCameraMoveListener,
64-
GoogleMap.OnCameraMoveStartedListener,
65-
GoogleMap.OnInfoWindowClickListener,
66-
GoogleMap.OnMarkerClickListener,
67-
GoogleMap.OnPolygonClickListener,
68-
GoogleMap.OnPolylineClickListener,
69-
GoogleMap.OnCircleClickListener,
7063
GoogleMapOptionsSink,
7164
MethodChannel.MethodCallHandler,
7265
OnMapReadyCallback,
73-
GoogleMap.OnMapClickListener,
74-
GoogleMap.OnMapLongClickListener,
75-
GoogleMap.OnMarkerDragListener,
66+
GoogleMapListener,
7667
PlatformView {
7768

7869
private static final String TAG = "GoogleMapController";
@@ -204,16 +195,7 @@ public void onMapReady(GoogleMap googleMap) {
204195
mapReadyResult.success(null);
205196
mapReadyResult = null;
206197
}
207-
googleMap.setOnCameraMoveStartedListener(this);
208-
googleMap.setOnCameraMoveListener(this);
209-
googleMap.setOnCameraIdleListener(this);
210-
googleMap.setOnMarkerClickListener(this);
211-
googleMap.setOnMarkerDragListener(this);
212-
googleMap.setOnPolygonClickListener(this);
213-
googleMap.setOnPolylineClickListener(this);
214-
googleMap.setOnCircleClickListener(this);
215-
googleMap.setOnMapClickListener(this);
216-
googleMap.setOnMapLongClickListener(this);
198+
setGoogleMapListener(this);
217199
updateMyLocationSettings();
218200
markersController.setGoogleMap(googleMap);
219201
polygonsController.setGoogleMap(googleMap);
@@ -544,10 +526,23 @@ public void dispose() {
544526
}
545527
disposed = true;
546528
methodChannel.setMethodCallHandler(null);
547-
mapView.onDestroy();
529+
setGoogleMapListener(null);
548530
getApplication().unregisterActivityLifecycleCallbacks(this);
549531
}
550532

533+
private void setGoogleMapListener(@Nullable GoogleMapListener listener) {
534+
googleMap.setOnCameraMoveStartedListener(listener);
535+
googleMap.setOnCameraMoveListener(listener);
536+
googleMap.setOnCameraIdleListener(listener);
537+
googleMap.setOnMarkerClickListener(listener);
538+
googleMap.setOnMarkerDragListener(listener);
539+
googleMap.setOnPolygonClickListener(listener);
540+
googleMap.setOnPolylineClickListener(listener);
541+
googleMap.setOnCircleClickListener(listener);
542+
googleMap.setOnMapClickListener(listener);
543+
googleMap.setOnMapLongClickListener(listener);
544+
}
545+
551546
// @Override
552547
// The minimum supported version of Flutter doesn't have this method on the PlatformView interface, but the maximum
553548
// does. This will override it when available even with the annotation commented out.
@@ -899,3 +894,16 @@ public void setBuildingsEnabled(boolean buildingsEnabled) {
899894
this.buildingsEnabled = buildingsEnabled;
900895
}
901896
}
897+
898+
interface GoogleMapListener
899+
extends GoogleMap.OnCameraIdleListener,
900+
GoogleMap.OnCameraMoveListener,
901+
GoogleMap.OnCameraMoveStartedListener,
902+
GoogleMap.OnInfoWindowClickListener,
903+
GoogleMap.OnMarkerClickListener,
904+
GoogleMap.OnPolygonClickListener,
905+
GoogleMap.OnPolylineClickListener,
906+
GoogleMap.OnCircleClickListener,
907+
GoogleMap.OnMapClickListener,
908+
GoogleMap.OnMapLongClickListener,
909+
GoogleMap.OnMarkerDragListener {}

packages/google_maps_flutter/google_maps_flutter/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: google_maps_flutter
22
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
33
homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter
4-
version: 0.5.26+3
4+
version: 0.5.26+4
55

66
dependencies:
77
flutter:

0 commit comments

Comments
 (0)