<p dir="auto">I have implemented an iOS MKMapView using the new UiKitView platform view. This appears to work quite well, apart from the gesture recognisers throwing errors.</p>
<p dir="auto">The Flutter side of the implementation</p>
<div class="highlight highlight-source-dart notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="typedef void DossierMapViewCreatedCallback(DossierMapViewController controller);

/// Shows a Map with the dossiers
class DossierMapView extends StatefulWidget {
  const DossierMapView({
    Key key,
    this.onDossierMapViewCreated,
    this.gestureRecognizers,
  }) : super(key: key);

  final DossierMapViewCreatedCallback onDossierMapViewCreated;

  final Set&lt;Factory&lt;OneSequenceGestureRecognizer&gt;&gt; gestureRecognizers;

  @override
  State&lt;StatefulWidget&gt; createState() =&gt; _DossierMapViewState();
}

///
class _DossierMapViewState extends State&lt;DossierMapView&gt; {
  final Completer&lt;DossierMapViewController&gt; _controller =
      Completer&lt;DossierMapViewController&gt;();

  @override
  Widget build(BuildContext context) {
    switch (defaultTargetPlatform) {
      case TargetPlatform.android:
        return AndroidView(
          viewType: _dossierMapViewType,
          onPlatformViewCreated: _onPlatformViewCreated,
        );

      case TargetPlatform.iOS:
        return GestureDetector(
          //onVerticalDragStart: (DragStartDetails details) {},
          child: UiKitView(
            viewType: _dossierMapViewType,
            onPlatformViewCreated: _onPlatformViewCreated,
            gestureRecognizers: &lt;Factory&lt;OneSequenceGestureRecognizer&gt;&gt;[
              new Factory&lt;OneSequenceGestureRecognizer&gt;(
                () =&gt; new EagerGestureRecognizer(),
              ),
            ].toSet(),
          ),
        );

      default:
        return Text(
            '$defaultTargetPlatform is not yet supported by the dossiers_map_view plugin');
    }
  }

  void _onPlatformViewCreated(int id) {
    final controller = DossierMapViewController._(id);
    _controller.complete(controller);

    if (widget.onDossierMapViewCreated != null) {
      widget.onDossierMapViewCreated(controller);
    }
  }
}

class DossierMapViewController {
  final MethodChannel _channel;

  DossierMapViewController._(int id)
      : _channel = MethodChannel(&quot;plugins.maxdoro.com/dossiermapview_$id&quot;);

  Future&lt;void&gt; setDossierList(List&lt;Map&lt;String, dynamic&gt;&gt; list) async {
    return _channel.invokeMethod(&quot;setDossierList&quot;, list);
  }
}"><pre class="notranslate"><span class="pl-k">typedef</span> <span class="pl-k">void</span> <span class="pl-c1">DossierMapViewCreatedCallback</span>(<span class="pl-c1">DossierMapViewController</span> controller);

<span class="pl-c">/// Shows a Map with the dossiers</span>
<span class="pl-c"></span><span class="pl-k">class</span> <span class="pl-c1">DossierMapView</span> <span class="pl-k">extends</span> <span class="pl-c1">StatefulWidget</span> {
  <span class="pl-k">const</span> <span class="pl-c1">DossierMapView</span>({
    <span class="pl-c1">Key</span> key,
    <span class="pl-c1">this</span>.onDossierMapViewCreated,
    <span class="pl-c1">this</span>.gestureRecognizers,
  }) <span class="pl-k">:</span> <span class="pl-c1">super</span>(key<span class="pl-k">:</span> key);

  <span class="pl-k">final</span> <span class="pl-c1">DossierMapViewCreatedCallback</span> onDossierMapViewCreated;

  <span class="pl-k">final</span> <span class="pl-c1">Set</span>&lt;<span class="pl-c1">Factory</span>&lt;<span class="pl-c1">OneSequenceGestureRecognizer</span>&gt;&gt; gestureRecognizers;

  <span class="pl-k">@override</span>
  <span class="pl-c1">State</span>&lt;<span class="pl-c1">StatefulWidget</span>&gt; <span class="pl-en">createState</span>() <span class="pl-k">=&gt;</span> <span class="pl-c1">_DossierMapViewState</span>();
}

<span class="pl-c">///</span>
<span class="pl-c"></span><span class="pl-k">class</span> <span class="pl-c1">_DossierMapViewState</span> <span class="pl-k">extends</span> <span class="pl-c1">State</span>&lt;<span class="pl-c1">DossierMapView</span>&gt; {
  <span class="pl-k">final</span> <span class="pl-c1">Completer</span>&lt;<span class="pl-c1">DossierMapViewController</span>&gt; _controller <span class="pl-k">=</span>
      <span class="pl-c1">Completer</span>&lt;<span class="pl-c1">DossierMapViewController</span>&gt;();

  <span class="pl-k">@override</span>
  <span class="pl-c1">Widget</span> <span class="pl-en">build</span>(<span class="pl-c1">BuildContext</span> context) {
    <span class="pl-k">switch</span> (defaultTargetPlatform) {
      <span class="pl-k">case</span> <span class="pl-c1">TargetPlatform</span>.android<span class="pl-k">:</span>
        <span class="pl-k">return</span> <span class="pl-c1">AndroidView</span>(
          viewType<span class="pl-k">:</span> _dossierMapViewType,
          onPlatformViewCreated<span class="pl-k">:</span> _onPlatformViewCreated,
        );

      <span class="pl-k">case</span> <span class="pl-c1">TargetPlatform</span>.iOS<span class="pl-k">:</span>
        <span class="pl-k">return</span> <span class="pl-c1">GestureDetector</span>(
          <span class="pl-c">//onVerticalDragStart: (DragStartDetails details) {},</span>
          child<span class="pl-k">:</span> <span class="pl-c1">UiKitView</span>(
            viewType<span class="pl-k">:</span> _dossierMapViewType,
            onPlatformViewCreated<span class="pl-k">:</span> _onPlatformViewCreated,
            gestureRecognizers<span class="pl-k">:</span> <span class="pl-k">&lt;</span><span class="pl-c1">Factory</span>&lt;<span class="pl-c1">OneSequenceGestureRecognizer</span>&gt;<span class="pl-k">&gt;</span>[
              <span class="pl-k">new</span> <span class="pl-c1">Factory</span>&lt;<span class="pl-c1">OneSequenceGestureRecognizer</span>&gt;(
                () <span class="pl-k">=&gt;</span> <span class="pl-k">new</span> <span class="pl-c1">EagerGestureRecognizer</span>(),
              ),
            ].<span class="pl-en">toSet</span>(),
          ),
        );

      <span class="pl-k">default</span><span class="pl-k">:</span>
        <span class="pl-k">return</span> <span class="pl-c1">Text</span>(
            <span class="pl-s">'$<span class="pl-v">defaultTargetPlatform</span> is not yet supported by the dossiers_map_view plugin'</span>);
    }
  }

  <span class="pl-k">void</span> <span class="pl-en">_onPlatformViewCreated</span>(<span class="pl-c1">int</span> id) {
    <span class="pl-k">final</span> controller <span class="pl-k">=</span> <span class="pl-c1">DossierMapViewController</span>._(id);
    _controller.<span class="pl-en">complete</span>(controller);

    <span class="pl-k">if</span> (widget.onDossierMapViewCreated <span class="pl-k">!=</span> <span class="pl-c1">null</span>) {
      widget.<span class="pl-en">onDossierMapViewCreated</span>(controller);
    }
  }
}

<span class="pl-k">class</span> <span class="pl-c1">DossierMapViewController</span> {
  <span class="pl-k">final</span> <span class="pl-c1">MethodChannel</span> _channel;

  <span class="pl-c1">DossierMapViewController</span>._(<span class="pl-c1">int</span> id)
      <span class="pl-k">:</span> _channel <span class="pl-k">=</span> <span class="pl-c1">MethodChannel</span>(<span class="pl-s">"plugins.maxdoro.com/dossiermapview_$<span class="pl-v">id</span>"</span>);

  <span class="pl-c1">Future</span>&lt;<span class="pl-k">void</span>&gt; <span class="pl-en">setDossierList</span>(<span class="pl-c1">List</span>&lt;<span class="pl-c1">Map</span>&lt;<span class="pl-c1">String</span>, <span class="pl-c1">dynamic</span>&gt;&gt; list) <span class="pl-k">async</span> {
    <span class="pl-k">return</span> _channel.<span class="pl-en">invokeMethod</span>(<span class="pl-s">"setDossierList"</span>, list);
  }
}</pre></div>
<p dir="auto">The important bit is probably the gesture recogniser passing</p>
<p dir="auto">Dragging and/or zooming the map view results in these exceptions being thrown</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[VERBOSE-2:shell.cc(184)] Dart Error: Unhandled exception:
[        ] 'package:flutter/src/gestures/converter.dart': Failed assertion: line 250 pos 18: 'state.down': is not true.
[        ] #0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
[        ] #1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
[        ] #2      PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:250:18)
[        ] #3      _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:151:12)
[        ] #4      ListQueue.addAll (dart:collection/queue.dart:715:25)
[        ] #5      _WidgetsFlutterBinding&amp;BindingBase&amp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
[        ] #6      _invoke1 (dart:ui/hooks.dart:165:13)
[        ] #7      _dispatchPointerDataPacket (dart:ui/hooks.dart:119:5)
[ +302 ms] [VERBOSE-2:shell.cc(184)] Dart Error: Unhandled exception:
[        ] 'package:flutter/src/gestures/converter.dart': Failed assertion: line 143 pos 18: '!state.down': is not true.
[        ] #0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
[        ] #1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
[        ] #2      PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:143:18)
[        ] #3      _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:151:12)
[        ] #4      ListQueue.addAll (dart:collection/queue.dart:715:25)
[        ] #5      _WidgetsFlutterBinding&amp;BindingBase&amp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
[        ] #6      _invoke1 (dart:ui/hooks.dart:165:13)
[        ] #7      _dispatchPointerDataPacket (dart:ui/hooks.dart:119:5)"><pre class="notranslate"><code class="notranslate">[VERBOSE-2:shell.cc(184)] Dart Error: Unhandled exception:
[        ] 'package:flutter/src/gestures/converter.dart': Failed assertion: line 250 pos 18: 'state.down': is not true.
[        ] #0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
[        ] #1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
[        ] #2      PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:250:18)
[        ] #3      _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:151:12)
[        ] #4      ListQueue.addAll (dart:collection/queue.dart:715:25)
[        ] #5      _WidgetsFlutterBinding&amp;BindingBase&amp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
[        ] #6      _invoke1 (dart:ui/hooks.dart:165:13)
[        ] #7      _dispatchPointerDataPacket (dart:ui/hooks.dart:119:5)
[ +302 ms] [VERBOSE-2:shell.cc(184)] Dart Error: Unhandled exception:
[        ] 'package:flutter/src/gestures/converter.dart': Failed assertion: line 143 pos 18: '!state.down': is not true.
[        ] #0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
[        ] #1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
[        ] #2      PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:143:18)
[        ] #3      _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:151:12)
[        ] #4      ListQueue.addAll (dart:collection/queue.dart:715:25)
[        ] #5      _WidgetsFlutterBinding&amp;BindingBase&amp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
[        ] #6      _invoke1 (dart:ui/hooks.dart:165:13)
[        ] #7      _dispatchPointerDataPacket (dart:ui/hooks.dart:119:5)
</code></pre></div>
<p dir="auto">I show two, but there are a lot more</p>
<p dir="auto">Tap on the link 'package:flutter/src/gestuires/converter.dart:, we see the assert testing state.down.</p>
<div class="highlight highlight-source-dart notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="       case ui.PointerChange.up:
        case ui.PointerChange.cancel:
          assert(_pointers.containsKey(datum.device));
          final _PointerState state = _pointers[datum.device];
          assert(state.down);
          if (position != state.lastPosition) {
            // Not all sources of pointer packets respect the invariant that
            // they move the pointer to the up location before sending the up
            // event. For example, in the iOS simulator, of you drag outside the
            // window, you'll get a stream of pointers that violates that
            // invariant. We restore the invariant here for our clients."><pre class="notranslate">       <span class="pl-k">case</span> ui.<span class="pl-c1">PointerChange</span>.up<span class="pl-k">:</span>
        <span class="pl-k">case</span> ui.<span class="pl-c1">PointerChange</span>.cancel<span class="pl-k">:</span>
          <span class="pl-k">assert</span>(_pointers.<span class="pl-en">containsKey</span>(datum.device));
          <span class="pl-k">final</span> <span class="pl-c1">_PointerState</span> state <span class="pl-k">=</span> _pointers[datum.device];
          <span class="pl-k">assert</span>(state.down);
          <span class="pl-k">if</span> (position <span class="pl-k">!=</span> state.lastPosition) {
            <span class="pl-c">// Not all sources of pointer packets respect the invariant that</span>
            <span class="pl-c">// they move the pointer to the up location before sending the up</span>
            <span class="pl-c">// event. For example, in the iOS simulator, of you drag outside the</span>
            <span class="pl-c">// window, you'll get a stream of pointers that violates that</span>
            <span class="pl-c">// invariant. We restore the invariant here for our clients.</span></pre></div>
<p dir="auto">flutter doctor -v says:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="sanders-mbp:waarnemingenapp sandervanderwal$ flutter doctor -v
[✓] Flutter (Channel master, v0.11.4-pre.6, on Mac OS X 10.14.1 18B75, locale en-NL)
    • Flutter version 0.11.4-pre.6 at /Users/sandervanderwal/Developer/flutter
    • Framework revision df57dc9da9 (10 hours ago), 2018-11-11 22:36:47 -0800
    • Engine revision 5646e86a6f
    • Dart version 2.1.0 (build 2.1.0-dev.9.3 9c07fb64c4)

[✓] Android toolchain - develop for Android devices (Android SDK 28.0.2)
    • Android SDK at /Users/sandervanderwal/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.2
    • 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-1136-b06)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.1, Build version 10B61
    • ios-deploy 1.9.2
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 30.0.1
    • Dart plugin version 181.5656
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] Connected device (1 available)
    • Turminder Xuss • ca4f8a0ddd55132ab42c253d7496b90a38b6b53c • ios • iOS 12.1

• No issues found!"><pre class="notranslate"><code class="notranslate">sanders-mbp:waarnemingenapp sandervanderwal$ flutter doctor -v
[✓] Flutter (Channel master, v0.11.4-pre.6, on Mac OS X 10.14.1 18B75, locale en-NL)
    • Flutter version 0.11.4-pre.6 at /Users/sandervanderwal/Developer/flutter
    • Framework revision df57dc9da9 (10 hours ago), 2018-11-11 22:36:47 -0800
    • Engine revision 5646e86a6f
    • Dart version 2.1.0 (build 2.1.0-dev.9.3 9c07fb64c4)

[✓] Android toolchain - develop for Android devices (Android SDK 28.0.2)
    • Android SDK at /Users/sandervanderwal/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.2
    • 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-1136-b06)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.1, Build version 10B61
    • ios-deploy 1.9.2
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 30.0.1
    • Dart plugin version 181.5656
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] Connected device (1 available)
    • Turminder Xuss • ca4f8a0ddd55132ab42c253d7496b90a38b6b53c • ios • iOS 12.1

• No issues found!
</code></pre></div>
<p dir="auto">Getting this error after double tapping a <code class="notranslate">UiKitView</code> on ios.<br>
Everything is fine when using <code class="notranslate">AndroidView</code> on android.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="Dart Error: Unhandled exception:
'package:flutter/src/gestures/converter.dart': Failed assertion: line 143 pos 18: '!state.down': is not true.
#0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
#1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
#2      PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:143:18)
#3      _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:151:12)
#4      ListQueue.addAll (dart:collection/queue.dart:715:25)
#5      _WidgetsFlutterBinding&amp;BindingBase&amp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
#6      _invoke1 (dart:ui/hooks.dart:165:13)
#7      _dispatchPointerDataPacket (dart:ui/hooks.dart:119:5)"><pre class="notranslate"><code class="notranslate">Dart Error: Unhandled exception:
'package:flutter/src/gestures/converter.dart': Failed assertion: line 143 pos 18: '!state.down': is not true.
#0      _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
#1      _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
#2      PointerEventConverter.expand (package:flutter/src/gestures/converter.dart:143:18)
#3      _SyncIterator.moveNext (dart:core/runtime/libcore_patch.dart:151:12)
#4      ListQueue.addAll (dart:collection/queue.dart:715:25)
#5      _WidgetsFlutterBinding&amp;BindingBase&amp;GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:83:27)
#6      _invoke1 (dart:ui/hooks.dart:165:13)
#7      _dispatchPointerDataPacket (dart:ui/hooks.dart:119:5)
</code></pre></div>
<h2 dir="auto">Steps to Reproduce</h2>
<p dir="auto"><a href="https://github.com/Unact/yandex_mapkit">Example app</a></p>
<ol dir="auto">
<li>Launch example</li>
<li>Double tap on map(Try a few times. Not every double tap reproduces this error)</li>
</ol>
<h2 dir="auto">Logs</h2>
<p dir="auto"><code class="notranslate">flutter analyze</code></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="Analyzing example...
No issues found! (ran in 13.1s)"><pre class="notranslate"><code class="notranslate">Analyzing example...
No issues found! (ran in 13.1s)
</code></pre></div>
<p dir="auto"><code class="notranslate">flutter doctor -v</code></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[✓] Flutter (Channel master, v0.11.1-pre.134, on Mac OS X 10.12.6 16G1510, locale en-RU)
    • Flutter version 0.11.1-pre.134 at /Users/ybarkovskij/Work/flutter
    • Framework revision 43407e4e01 (13 hours ago), 2018-11-09 16:04:33 -0500
    • Engine revision 316f6365a6
    • Dart version 2.1.0 (build 2.1.0-dev.9.3 9c07fb64c4)

[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
    • Android SDK at /Users/ybarkovskij/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 27.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-1024-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 9.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 9.2, Build version 9C40b
    • ios-deploy 1.9.2
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 27.1.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[✓] VS Code (version 1.28.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 2.19.0

[✓] Connected device (1 available)
    • iPhone 5s • B276608C-A108-426E-BAF7-DE6244D7C4D0 • ios • iOS 11.2 (simulator)

• No issues found!"><pre class="notranslate"><code class="notranslate">[✓] Flutter (Channel master, v0.11.1-pre.134, on Mac OS X 10.12.6 16G1510, locale en-RU)
    • Flutter version 0.11.1-pre.134 at /Users/ybarkovskij/Work/flutter
    • Framework revision 43407e4e01 (13 hours ago), 2018-11-09 16:04:33 -0500
    • Engine revision 316f6365a6
    • Dart version 2.1.0 (build 2.1.0-dev.9.3 9c07fb64c4)

[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
    • Android SDK at /Users/ybarkovskij/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 27.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-1024-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 9.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 9.2, Build version 9C40b
    • ios-deploy 1.9.2
    • CocoaPods version 1.5.3

[✓] Android Studio (version 3.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 27.1.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[✓] VS Code (version 1.28.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 2.19.0

[✓] Connected device (1 available)
    • iPhone 5s • B276608C-A108-426E-BAF7-DE6244D7C4D0 • ios • iOS 11.2 (simulator)

• No issues found!
</code></pre></div>