Repository: flutter
Issue: [google_maps_flutter][iOS] Override default animate Camera on MarkerTap
Labels: platform-ios,p: maps,package,c: proposal,P3,team-ios,triaged-ios

<!-- Thank you for using Flutter!

     If you are looking for support, please check out our documentation
     or consider asking a question on Stack Overflow:
      * https://flutter.dev/
      * https://api.flutter.dev/
      * https://stackoverflow.com/questions/tagged/flutter?sort=frequent

     If you have found a bug or if our documentation doesn't have an answer
     to what you're looking for, then fill our the template below. Please read
     our guide to filing a bug first: https://flutter.dev/docs/resources/bug-reports
-->

## Steps to Reproduce

<!--
     Please tell us exactly how to reproduce the problem you are running into.

     Please attach a small application (ideally just one main.dart file) that
     reproduces the problem. You could use https://gist.github.com/ for this.

     If the problem is with your application's rendering, then please attach
     a screenshot and explain what the problem is.
-->



1. ... Use animateCamera in onTap of marker
2. ... Tap the marker
3. ... Tap it again and again 
4. ... There should be no movement, since the camera position is already reached

In my case I got a bottom sheet that might fill the half of the screen. Therefore the default behavior that centers the tapped marker does not suit the case. 
That's why I calculate an offset to center the marker in the upper part of the screen. 

When taping it again and again (see the screen video) sometimes the usual center animation is started, but then interrupted by the one from my onTap callback. Causing a jump.

On Android the camera move is overwritten like expected. 

Link to Screen Recordings:
https://photos.app.goo.gl/7mVYLPZaM4NpuX476


```dart
void _onMarkerClicked(MarkerId markerId, Toilet selectedToilet) {
    print(
        'On Marker for Toilet ${selectedToilet.name} clicked valid=$markerTapValid');

    if(!markerTapValid){
      return;
    }

    final Marker tappedMarker = _markers[markerId];
    if (tappedMarker != null) {
      // Set back old tapped & set new one as tapped
      setState(() {
        _resetOldTappedMarker();
        _updateTappedMarker(selectedToilet, tappedMarker);
      });
    }

    _controller.future.then((GoogleMapController controller) {
      controller.animateCamera(CameraUpdate.newLatLng(LatLng(
          selectedToilet.latitude -
              MapUtils.calculateLatitudeOffset(_currentCameraPosition),
          selectedToilet.longitude -
              MapUtils.calculateLongitudeOffset(_currentCameraPosition))));
    });

    // Store selected toilet and update bottom sheet
    _selectedToilet = selectedToilet;
    if (_bottomSheetController == null) {
      print('calling _showBottomSheet');
      _showBottomSheet();
    } else {
      print('calling _bottomSheetController.setState');
      _bottomSheetController.setState(() {});
    }
  }
```
## Logs

<!--
     Run `flutter analyze` and attach any output of that command below.
     If there are any analysis errors, try resolving them before filing this issue.
-->

```
info • Unused import: 'dart:async' • lib/main.dart:1:8 • unused_import
   info • Name non-constant identifiers using lowerCamelCase • lib/model/Toilet.dart:30:29 • non_constant_identifier_names
   info • Always override `hashCode` if overriding `==` • lib/model/incident_type.dart:9:17 • hash_and_equals
   info • This class (or a class which this class inherits from) is marked as '@immutable', but one or more of its instance fields are not final: LegalScreen._markdownData • lib/screens/legal_screen.dart:9:7 • must_be_immutable
   info • Don't explicitly initialize variables to null • lib/screens/map_screen.dart:35:41 • avoid_init_to_null
   info • Don't explicitly initialize variables to null • lib/screens/map_screen.dart:36:10 • avoid_init_to_null
   info • 'fromAsset' is deprecated and shouldn't be used • lib/screens/map_screen.dart:268:31 • deprecated_member_use
   info • 'fromAsset' is deprecated and shouldn't be used • lib/screens/map_screen.dart:272:31 • deprecated_member_use
   info • Don't explicitly initialize variables to null • lib/screens/report_incident_screen.dart:21:16 • avoid_init_to_null

```

<!-- Finally, paste the output of running `flutter doctor -v` here. -->

```
[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.14.4 18E226, locale de-DE)
    • Flutter version 1.2.1 at /Users/adrian/Development/flutter
    • Framework revision 8661d8aecd (3 months ago), 2019-02-14 19:19:53 -0800
    • Engine revision 3757390fa4
    • Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/adrian/Library/Android/sdk
    • Android NDK at /Users/adrian/Library/Android/sdk/ndk-bundle
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[!] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.2.1, Build version 10E1001
    ✗ Verify that all connected devices have been paired with this computer in Xcode.
      If all devices have been paired, libimobiledevice and ideviceinstaller may require updating.
      To update with Brew, run:
        brew update
        brew uninstall --ignore-dependencies libimobiledevice
        brew uninstall --ignore-dependencies usbmuxd
        brew install --HEAD usbmuxd
        brew unlink usbmuxd
        brew link usbmuxd
        brew install --HEAD libimobiledevice
        brew install ideviceinstaller
    • ios-deploy 1.9.4
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.4)
    • Android Studio at /Applications/Android Studio 3.4.app/Contents
    • Flutter plugin version 34.0.2
    • Dart plugin version 183.5901
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[✓] Android Studio (version 3.4)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 34.0.2
    • Dart plugin version 183.5901
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[!] IntelliJ IDEA Ultimate Edition (version 2018.3)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • For information about installing plugins, see
      https://flutter.io/intellij-setup/#installing-the-plugins

[✓] Connected device (3 available)
    • SM T580                   • 52003158e2231509                     • android-arm • Android 8.1.0 (API 27)
    • Android SDK built for x86 • emulator-5554                        • android-x86 • Android 9 (API 28) (emulator)
    • iPhone Xʀ                 • 4F39F049-E21A-4749-AA57-FA51D1CB133C • ios         • com.apple.CoreSimulator.SimRuntime.iOS-12-2 (simulator)
```