From cd7aa709e8f0a197c1098ebb5db32ee822ccb889 Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 09:29:00 +0300 Subject: [PATCH 1/7] successful clustering --- example/ios/Flutter/.last_build_id | 2 +- .../ios/Flutter/flutter_export_environment.sh | 11 ++-- example/ios/Podfile.lock | 4 +- example/ios/Runner.xcodeproj/project.pbxproj | 4 +- example/pubspec.lock | 62 ++++++++++++------- .../ClusterableAnnotationView.swift | 30 +++++++++ ios/Classes/MapView/AppleMapController.swift | 39 ++++++++++-- 7 files changed, 113 insertions(+), 39 deletions(-) create mode 100644 ios/Classes/Annotations/ClusterableAnnotationView.swift diff --git a/example/ios/Flutter/.last_build_id b/example/ios/Flutter/.last_build_id index 1bc090e..2e13ff7 100644 --- a/example/ios/Flutter/.last_build_id +++ b/example/ios/Flutter/.last_build_id @@ -1 +1 @@ -591abfdc9d5f6fd539f4691920d32a90 \ No newline at end of file +c2d88f8e5c497343b4d326285ebc69f8 \ No newline at end of file diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh index 42539b0..e3be609 100755 --- a/example/ios/Flutter/flutter_export_environment.sh +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -1,15 +1,16 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/luis/development/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/luis/workspace/flutter_packages/apple_maps_flutter/example" -export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_ROOT=/usr/local/bin/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/sarupu/workspace/apple_maps_flutter/example" +export "FLUTTER_TARGET=/Users/sarupu/workspace/apple_maps_flutter/example/lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "SYMROOT=${SOURCE_ROOT}/../build/ios" export "OTHER_LDFLAGS=$(inherited) -framework Flutter" -export "FLUTTER_FRAMEWORK_DIR=/Users/luis/development/flutter/bin/cache/artifacts/engine/ios" +export "FLUTTER_FRAMEWORK_DIR=/usr/local/bin/flutter/bin/cache/artifacts/engine/ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" +export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue" export "DART_OBFUSCATION=false" -export "TRACK_WIDGET_CREATION=false" +export "TRACK_WIDGET_CREATION=true" export "TREE_SHAKE_ICONS=false" export "PACKAGE_CONFIG=.packages" diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 4be6ffb..d83850a 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -14,9 +14,9 @@ EXTERNAL SOURCES: :path: Flutter SPEC CHECKSUMS: - apple_maps_flutter: a2682659ffca031c41420f5b5e66484c86ecdb19 + apple_maps_flutter: c59725efea39e13e703cde52a1d2b14866ad68a8 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c -COCOAPODS: 1.10.0 +COCOAPODS: 1.10.1 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 3463eb0..e4f1185 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -168,7 +168,7 @@ TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = PT2UDFM269; + DevelopmentTeam = JW3AH8GW3D; LastSwiftMigration = 1100; ProvisioningStyle = Automatic; }; @@ -504,7 +504,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = JW3AH8GW3D; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/example/pubspec.lock b/example/pubspec.lock index 68f8fcf..5f88a73 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -42,28 +42,28 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.3" + version: "2.5.0-nullsafety.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.5" + version: "1.1.0-nullsafety.3" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" cli_util: dependency: transitive description: @@ -77,14 +77,14 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.5" + version: "1.15.0-nullsafety.3" convert: dependency: transitive description: @@ -119,14 +119,14 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.0.0-nullsafety.4" + version: "6.0.0-nullsafety.2" flutter: dependency: "direct main" description: flutter @@ -154,6 +154,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.2" http_multi_server: dependency: transitive description: @@ -202,14 +209,14 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.3" + version: "0.12.10-nullsafety.1" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.6" + version: "1.3.0-nullsafety.3" mime: dependency: transitive description: @@ -251,7 +258,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.3" + version: "1.8.0-nullsafety.1" pedantic: dependency: transitive description: @@ -265,7 +272,7 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.0.0-nullsafety.4" + version: "3.0.0-nullsafety.2" pool: dependency: transitive description: @@ -279,7 +286,7 @@ packages: name: process url: "https://pub.dartlang.org" source: hosted - version: "4.0.0-nullsafety.4" + version: "4.0.0-nullsafety.2" pub_semver: dependency: transitive description: @@ -340,28 +347,28 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.4" + version: "1.8.0-nullsafety.2" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.6" + version: "1.10.0-nullsafety.1" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" sync_http: dependency: transitive description: @@ -375,42 +382,42 @@ packages: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" test: dependency: "direct dev" description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.16.0-nullsafety.12" + version: "1.16.0-nullsafety.5" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.6" + version: "0.2.19-nullsafety.2" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.3.12-nullsafety.11" + version: "0.3.12-nullsafety.5" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.5" + version: "1.3.0-nullsafety.3" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.5" + version: "2.1.0-nullsafety.3" vm_service: dependency: transitive description: @@ -418,6 +425,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.2.0" + vm_service_client: + dependency: transitive + description: + name: vm_service_client + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.6+2" watcher: dependency: transitive description: @@ -454,5 +468,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.12.0-0.0 <=2.12.0-29.10.beta" + dart: ">=2.10.0-110 <2.11.0" flutter: ">=1.10.0 <2.0.0" diff --git a/ios/Classes/Annotations/ClusterableAnnotationView.swift b/ios/Classes/Annotations/ClusterableAnnotationView.swift new file mode 100644 index 0000000..73e9306 --- /dev/null +++ b/ios/Classes/Annotations/ClusterableAnnotationView.swift @@ -0,0 +1,30 @@ +// +// ClusteredAnnotationView.swift +// apple_maps_flutter +// +// Created by sarupu on 15.02.2021. +// + +import MapKit + +@available(iOS 11.0, *) +class ClusterableAnnotationView: MKAnnotationView { + override var annotation: MKAnnotation? { + didSet { + guard let mapItem = annotation as? FlutterAnnotation else { return } + clusteringIdentifier = "MapItem" + image = mapItem.icon.image + } + } +} + +@available(iOS 11.0, *) +final class ClusterAnnotationView: MKAnnotationView { + override var annotation: MKAnnotation? { + didSet { + guard let cluster = annotation as? MKClusterAnnotation, let firstAnnotation = cluster.memberAnnotations.first as? FlutterAnnotation else { return } + displayPriority = .defaultHigh + image = firstAnnotation.image + } + } +} diff --git a/ios/Classes/MapView/AppleMapController.swift b/ios/Classes/MapView/AppleMapController.swift index 7f3b3ad..f460c13 100644 --- a/ios/Classes/MapView/AppleMapController.swift +++ b/ios/Classes/MapView/AppleMapController.swift @@ -29,6 +29,7 @@ public class AppleMapViewFactory: NSObject, FlutterPlatformViewFactory { } } +let isClusteringEnabled = true public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelegate { var mapView: FlutterMapView! @@ -59,6 +60,18 @@ public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelega super.init() self.mapView.delegate = self + + if isClusteringEnabled { + if #available(iOS 11.0, *) { + mapView.register( + ClusterableAnnotationView.self, + forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier) + mapView.register( + ClusterAnnotationView.self, + forAnnotationViewWithReuseIdentifier: MKMapViewDefaultClusterAnnotationViewReuseIdentifier) + } + } + self.mapView.setCenterCoordinate(initialCameraPosition, animated: false) self.setMethodCallHandlers() @@ -93,13 +106,26 @@ public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelega } public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { - if let annotation :FlutterAnnotation = view.annotation as? FlutterAnnotation { - if annotation.infoWindowConsumesTapEvents { - view.addGestureRecognizer(self.onCalloutTapGestureRecognizer!) + let annotationCandidate: MKAnnotation? + print("didSelectView called") + + if #available(iOS 11.0, *) { + if let cluster = view.annotation as? MKClusterAnnotation { + annotationCandidate = cluster.memberAnnotations.first + } else { + annotationCandidate = view.annotation } - self.currentlySelectedAnnotation = annotation.id - self.annotationController.onAnnotationClick(annotation: annotation) + } else { + annotationCandidate = view.annotation } + + guard let annotation :FlutterAnnotation = annotationCandidate as? FlutterAnnotation else { return } + + if annotation.infoWindowConsumesTapEvents { + view.addGestureRecognizer(self.onCalloutTapGestureRecognizer!) + } + self.currentlySelectedAnnotation = annotation.id + self.annotationController.onAnnotationClick(annotation: annotation) } public func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) { @@ -109,6 +135,9 @@ public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelega public func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { + guard !isClusteringEnabled else { + return nil + } if annotation is MKUserLocation { return nil } else if let flutterAnnotation = annotation as? FlutterAnnotation { From 7615cee1a34d32c5fa300504011d935733ffcde8 Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 09:36:36 +0300 Subject: [PATCH 2/7] small optimization --- example/ios/Flutter/.last_build_id | 2 +- ios/Classes/Annotations/ClusterableAnnotationView.swift | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/example/ios/Flutter/.last_build_id b/example/ios/Flutter/.last_build_id index 2e13ff7..d555909 100644 --- a/example/ios/Flutter/.last_build_id +++ b/example/ios/Flutter/.last_build_id @@ -1 +1 @@ -c2d88f8e5c497343b4d326285ebc69f8 \ No newline at end of file +f66c8ab0bcf3e658684a308f44ad7229 \ No newline at end of file diff --git a/ios/Classes/Annotations/ClusterableAnnotationView.swift b/ios/Classes/Annotations/ClusterableAnnotationView.swift index 73e9306..f2a3c46 100644 --- a/ios/Classes/Annotations/ClusterableAnnotationView.swift +++ b/ios/Classes/Annotations/ClusterableAnnotationView.swift @@ -9,11 +9,15 @@ import MapKit @available(iOS 11.0, *) class ClusterableAnnotationView: MKAnnotationView { + + var lastAnnotation: FlutterAnnotation? + override var annotation: MKAnnotation? { didSet { - guard let mapItem = annotation as? FlutterAnnotation else { return } + guard let mapItem = annotation as? FlutterAnnotation, mapItem != lastAnnotation else { return } clusteringIdentifier = "MapItem" image = mapItem.icon.image + lastAnnotation = mapItem } } } From 81e2a4545c990a7a8e5318d0588132968cf797a0 Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 09:37:49 +0300 Subject: [PATCH 3/7] change clustering id --- ios/Classes/Annotations/ClusterableAnnotationView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/Classes/Annotations/ClusterableAnnotationView.swift b/ios/Classes/Annotations/ClusterableAnnotationView.swift index f2a3c46..ccb59c8 100644 --- a/ios/Classes/Annotations/ClusterableAnnotationView.swift +++ b/ios/Classes/Annotations/ClusterableAnnotationView.swift @@ -15,7 +15,7 @@ class ClusterableAnnotationView: MKAnnotationView { override var annotation: MKAnnotation? { didSet { guard let mapItem = annotation as? FlutterAnnotation, mapItem != lastAnnotation else { return } - clusteringIdentifier = "MapItem" + clusteringIdentifier = "apple_maps_flutter_ci" image = mapItem.icon.image lastAnnotation = mapItem } From b1653fac71d83be7b455ef2eb0a338f5082292d7 Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 10:15:25 +0300 Subject: [PATCH 4/7] add clustering option to flutter layer with example --- example/lib/main.dart | 2 + example/lib/place_annotation_clustered.dart | 166 +++++++++++++++++++ ios/Classes/MapView/AppleMapController.swift | 6 +- lib/src/apple_map.dart | 7 + 4 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 example/lib/place_annotation_clustered.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index 3c0e84a..f8d61d7 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -5,6 +5,7 @@ import 'package:apple_maps_flutter_example/map_update.dart'; import 'package:apple_maps_flutter_example/padding.dart'; import 'package:apple_maps_flutter_example/place_annotation.dart'; +import 'package:apple_maps_flutter_example/place_annotation_clustered.dart'; import 'package:apple_maps_flutter_example/place_circle.dart'; import 'package:apple_maps_flutter_example/place_polyline.dart'; import 'package:apple_maps_flutter_example/place_polygon.dart'; @@ -26,6 +27,7 @@ final List _allPages = [ MoveCameraPage(), PaddingPage(), PlaceAnnotationPage(), + PlaceAnnotationClusteredPage(), AnnotationIconsPage(), PlacePolylinePage(), PlacePolygonPage(), diff --git a/example/lib/place_annotation_clustered.dart b/example/lib/place_annotation_clustered.dart new file mode 100644 index 0000000..ae8ce2e --- /dev/null +++ b/example/lib/place_annotation_clustered.dart @@ -0,0 +1,166 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; +import 'dart:math'; +import 'dart:typed_data'; +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:apple_maps_flutter/apple_maps_flutter.dart'; +import 'package:flutter/services.dart'; + +import 'page.dart'; +import 'dart:ui' as ui; + +class PlaceAnnotationClusteredPage extends ExamplePage { + PlaceAnnotationClusteredPage() + : super(const Icon(Icons.place), 'Place annotation clustered'); + + @override + Widget build(BuildContext context) { + return const PlaceAnnotationClusteredBody(); + } +} + +class PlaceAnnotationClusteredBody extends StatefulWidget { + const PlaceAnnotationClusteredBody(); + + @override + State createState() => PlaceAnnotationClusteredBodyState(); +} + +typedef Annotation AnnotationUpdateAction(Annotation annotation); + +class PlaceAnnotationClusteredBodyState + extends State { + PlaceAnnotationClusteredBodyState(); + static final LatLng center = const LatLng(-33.86711, 151.1947171); + + AppleMapController controller; + Map annotations = {}; + AnnotationId selectedAnnotation; + int _annotationIdCounter = 1; + BitmapDescriptor _annotationIcon; + BitmapDescriptor _iconFromBytes; + double _devicePixelRatio = 3.0; + + void _onMapCreated(AppleMapController controller) { + this.controller = controller; + } + + @override + void dispose() { + super.dispose(); + } + + void _onAnnotationTapped(AnnotationId annotationId) { + final Annotation tappedAnnotation = annotations[annotationId]; + if (tappedAnnotation != null) { + setState(() { + if (annotations.containsKey(selectedAnnotation)) { + final Annotation resetOld = + annotations[selectedAnnotation].copyWith(); + annotations[selectedAnnotation] = resetOld; + } + selectedAnnotation = annotationId; + }); + } + } + + void _add(String iconType) { + final int annotationCount = annotations.length; + + if (annotationCount == 12) { + return; + } + + final String annotationIdVal = 'annotation_id_$_annotationIdCounter'; + _annotationIdCounter++; + final AnnotationId annotationId = AnnotationId(annotationIdVal); + + final Annotation annotation = Annotation( + annotationId: annotationId, + icon: iconType == 'marker' + ? BitmapDescriptor.markerAnnotation + : iconType == 'pin' + ? BitmapDescriptor.defaultAnnotation + : iconType == 'customAnnotationFromBytes' + ? _iconFromBytes + : _annotationIcon, + position: LatLng( + center.latitude + sin(_annotationIdCounter * pi / 6.0) / 20.0, + center.longitude + cos(_annotationIdCounter * pi / 6.0) / 20.0, + ), + infoWindow: InfoWindow( + title: annotationIdVal, + anchor: Offset(0.5, 0.0), + snippet: '*', + onTap: () => print('InfowWindow of id: $annotationId tapped.')), + onTap: () { + _onAnnotationTapped(annotationId); + }, + ); + + setState(() { + annotations[annotationId] = annotation; + }); + } + + Future _createAnnotationImageFromAsset( + BuildContext context, double devicelPixelRatio) async { + if (_annotationIcon == null) { + final ImageConfiguration imageConfiguration = + ImageConfiguration(devicePixelRatio: devicelPixelRatio); + BitmapDescriptor.fromAssetImage( + imageConfiguration, 'assets/red_square.png') + .then(_updateBitmap); + } + } + + void _updateBitmap(BitmapDescriptor bitmap) { + setState(() { + _annotationIcon = bitmap; + }); + } + + Future _getBytesFromAsset(String path, int width) async { + ByteData data = await rootBundle.load(path); + ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(), + targetWidth: width); + ui.FrameInfo fi = await codec.getNextFrame(); + _iconFromBytes = BitmapDescriptor.fromBytes( + (await fi.image.toByteData(format: ui.ImageByteFormat.png)) + .buffer + .asUint8List()); + } + + @override + Widget build(BuildContext context) { + _createAnnotationImageFromAsset(context, _devicePixelRatio); + _getBytesFromAsset('assets/red_square.png', 40); + return Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + child: Container( + child: AppleMap( + onMapCreated: _onMapCreated, + initialCameraPosition: const CameraPosition( + target: LatLng(-33.852, 151.211), + zoom: 11, + ), + annotations: Set.of(annotations.values), + enableClustering: true, + ), + ), + ), + FlatButton( + child: const Text('customAnnotation from bytes'), + onPressed: () => _add('customAnnotationFromBytes'), + ), + ]); + } +} diff --git a/ios/Classes/MapView/AppleMapController.swift b/ios/Classes/MapView/AppleMapController.swift index f460c13..52f6be3 100644 --- a/ios/Classes/MapView/AppleMapController.swift +++ b/ios/Classes/MapView/AppleMapController.swift @@ -29,8 +29,6 @@ public class AppleMapViewFactory: NSObject, FlutterPlatformViewFactory { } } -let isClusteringEnabled = true - public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelegate { var mapView: FlutterMapView! var registrar: FlutterPluginRegistrar @@ -44,6 +42,8 @@ public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelega var onCalloutTapGestureRecognizer: UITapGestureRecognizer? var currentlySelectedAnnotation: String? + var isClusteringEnabled = false + public init(withFrame frame: CGRect, withRegistrar registrar: FlutterPluginRegistrar, withargs args: Dictionary ,withId id: Int64) { self.options = args["options"] as! [String: Any] self.channel = FlutterMethodChannel(name: "apple_maps_plugin.luisthein.de/apple_maps_\(id)", binaryMessenger: registrar.messenger()) @@ -56,7 +56,7 @@ public class AppleMapController : NSObject, FlutterPlatformView, MKMapViewDelega self.polygonController = PolygonController(mapView: mapView, channel: channel, registrar: registrar) self.circleController = CircleController(mapView: mapView, channel: channel, registrar: registrar) self.initialCameraPosition = args["initialCameraPosition"]! as! Dictionary - + self.isClusteringEnabled = args["clusteringEnabled"] as! Bool super.init() self.mapView.delegate = self diff --git a/lib/src/apple_map.dart b/lib/src/apple_map.dart index 5f483f6..601fc02 100644 --- a/lib/src/apple_map.dart +++ b/lib/src/apple_map.dart @@ -41,6 +41,7 @@ class AppleMap extends StatefulWidget { this.onCameraIdle, this.onTap, this.onLongPress, + this.enableClustering = false, }) : assert(initialCameraPosition != null), super(key: key); @@ -163,6 +164,11 @@ class AppleMap extends StatefulWidget { /// native controls. final EdgeInsets padding; + /// Enables or disables MapKit native clustering. + /// + /// Warning: Experimental. This feature has only been tested with custom icon annotations. + final bool enableClustering; + @override State createState() => _AppleMapState(); } @@ -186,6 +192,7 @@ class _AppleMapState extends State { 'polylinesToAdd': _serializePolylineSet(widget.polylines), 'polygonsToAdd': _serializePolygonSet(widget.polygons), 'circlesToAdd': _serializeCircleSet(widget.circles), + 'clusteringEnabled': widget.enableClustering, }; if (defaultTargetPlatform == TargetPlatform.iOS) { return UiKitView( From 09419902273b34c666f107515f169341692a949e Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 10:23:03 +0300 Subject: [PATCH 5/7] cleanup --- example/ios/Flutter/.last_build_id | 2 +- .../ios/Flutter/flutter_export_environment.sh | 11 +- example/ios/Podfile.lock | 4 +- example/ios/Runner.xcodeproj/project.pbxproj | 4 +- pubspec.lock | 351 +++++++++++++++++- 5 files changed, 341 insertions(+), 31 deletions(-) diff --git a/example/ios/Flutter/.last_build_id b/example/ios/Flutter/.last_build_id index d555909..1bc090e 100644 --- a/example/ios/Flutter/.last_build_id +++ b/example/ios/Flutter/.last_build_id @@ -1 +1 @@ -f66c8ab0bcf3e658684a308f44ad7229 \ No newline at end of file +591abfdc9d5f6fd539f4691920d32a90 \ No newline at end of file diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh index e3be609..42539b0 100755 --- a/example/ios/Flutter/flutter_export_environment.sh +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -1,16 +1,15 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/usr/local/bin/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/sarupu/workspace/apple_maps_flutter/example" -export "FLUTTER_TARGET=/Users/sarupu/workspace/apple_maps_flutter/example/lib/main.dart" +export "FLUTTER_ROOT=/Users/luis/development/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/luis/workspace/flutter_packages/apple_maps_flutter/example" +export "FLUTTER_TARGET=lib/main.dart" export "FLUTTER_BUILD_DIR=build" export "SYMROOT=${SOURCE_ROOT}/../build/ios" export "OTHER_LDFLAGS=$(inherited) -framework Flutter" -export "FLUTTER_FRAMEWORK_DIR=/usr/local/bin/flutter/bin/cache/artifacts/engine/ios" +export "FLUTTER_FRAMEWORK_DIR=/Users/luis/development/flutter/bin/cache/artifacts/engine/ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" -export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue" export "DART_OBFUSCATION=false" -export "TRACK_WIDGET_CREATION=true" +export "TRACK_WIDGET_CREATION=false" export "TREE_SHAKE_ICONS=false" export "PACKAGE_CONFIG=.packages" diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index d83850a..4be6ffb 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -14,9 +14,9 @@ EXTERNAL SOURCES: :path: Flutter SPEC CHECKSUMS: - apple_maps_flutter: c59725efea39e13e703cde52a1d2b14866ad68a8 + apple_maps_flutter: a2682659ffca031c41420f5b5e66484c86ecdb19 Flutter: 0e3d915762c693b495b44d77113d4970485de6ec PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c -COCOAPODS: 1.10.1 +COCOAPODS: 1.10.0 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index e4f1185..3463eb0 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -168,7 +168,7 @@ TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = JW3AH8GW3D; + DevelopmentTeam = PT2UDFM269; LastSwiftMigration = 1100; ProvisioningStyle = Automatic; }; @@ -504,7 +504,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = JW3AH8GW3D; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/pubspec.lock b/pubspec.lock index cd6330d..68f8fcf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,147 +1,458 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "11.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "0.40.4" + apple_maps_flutter: + dependency: "direct dev" + description: + path: ".." + relative: true + source: path + version: "0.1.2+5" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.1" + version: "2.5.0-nullsafety.3" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0-nullsafety.3" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.5" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0-nullsafety.3" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0-nullsafety.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.3" + version: "1.15.0-nullsafety.5" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + coverage: + dependency: transitive + description: + name: coverage + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0-nullsafety.3" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.0-nullsafety.4" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" - flutter_test: + flutter_driver: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + flutter_test: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fuchsia_remote_debug_protocol: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.4" + io: + dependency: transitive + description: + name: io + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.4" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3-nullsafety.2" + json_rpc_2: + dependency: transitive + description: + name: json_rpc_2 + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.2" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.4" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.1" + version: "0.12.10-nullsafety.3" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0-nullsafety.6" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7" + node_interop: + dependency: transitive + description: + name: node_interop + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + node_io: + dependency: transitive + description: + name: node_io + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + node_preamble: + dependency: transitive + description: + name: node_preamble + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.12" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.1" + version: "1.8.0-nullsafety.3" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0-nullsafety.2" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0-nullsafety.4" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.0-nullsafety.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0-nullsafety.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.4" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.9" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shelf_static: + dependency: transitive + description: + name: shelf_static + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.8" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.3" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0-nullsafety.3" + source_maps: + dependency: transitive + description: + name: source_maps + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.10-nullsafety.2" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.2" + version: "1.8.0-nullsafety.4" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0-nullsafety.6" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0-nullsafety.3" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0-nullsafety.3" + sync_http: + dependency: transitive + description: + name: sync_http + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0-nullsafety.3" + test: + dependency: "direct dev" + description: + name: test + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0-nullsafety.12" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.2" + version: "0.2.19-nullsafety.6" + test_core: + dependency: transitive + description: + name: test_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.12-nullsafety.11" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0-nullsafety.5" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.5" + vm_service: + dependency: transitive + description: + name: vm_service + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7+15" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + webdriver: + dependency: transitive + description: + name: webdriver + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.3" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" sdks: - dart: ">=2.10.0-110 <2.11.0" + dart: ">=2.12.0-0.0 <=2.12.0-29.10.beta" flutter: ">=1.10.0 <2.0.0" From 8e81239cdc07c180cb6c7839ba5dfd774b94985b Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 10:25:39 +0300 Subject: [PATCH 6/7] cleanup example podspec --- example/pubspec.lock | 62 +++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index 5f88a73..68f8fcf 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -42,28 +42,28 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.1" + version: "2.5.0-nullsafety.3" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0-nullsafety.3" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.5" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0-nullsafety.3" cli_util: dependency: transitive description: @@ -77,14 +77,14 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0-nullsafety.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.3" + version: "1.15.0-nullsafety.5" convert: dependency: transitive description: @@ -119,14 +119,14 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0-nullsafety.3" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.0.0-nullsafety.2" + version: "6.0.0-nullsafety.4" flutter: dependency: "direct main" description: flutter @@ -154,13 +154,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.2.0" - http: - dependency: transitive - description: - name: http - url: "https://pub.dartlang.org" - source: hosted - version: "0.12.2" http_multi_server: dependency: transitive description: @@ -209,14 +202,14 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.1" + version: "0.12.10-nullsafety.3" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0-nullsafety.6" mime: dependency: transitive description: @@ -258,7 +251,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.1" + version: "1.8.0-nullsafety.3" pedantic: dependency: transitive description: @@ -272,7 +265,7 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.0.0-nullsafety.2" + version: "3.0.0-nullsafety.4" pool: dependency: transitive description: @@ -286,7 +279,7 @@ packages: name: process url: "https://pub.dartlang.org" source: hosted - version: "4.0.0-nullsafety.2" + version: "4.0.0-nullsafety.4" pub_semver: dependency: transitive description: @@ -347,28 +340,28 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.2" + version: "1.8.0-nullsafety.4" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.1" + version: "1.10.0-nullsafety.6" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.1" + version: "2.1.0-nullsafety.3" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.1" + version: "1.1.0-nullsafety.3" sync_http: dependency: transitive description: @@ -382,42 +375,42 @@ packages: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.1" + version: "1.2.0-nullsafety.3" test: dependency: "direct dev" description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.16.0-nullsafety.5" + version: "1.16.0-nullsafety.12" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.2" + version: "0.2.19-nullsafety.6" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.3.12-nullsafety.5" + version: "0.3.12-nullsafety.11" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.3" + version: "1.3.0-nullsafety.5" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.5" vm_service: dependency: transitive description: @@ -425,13 +418,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "5.2.0" - vm_service_client: - dependency: transitive - description: - name: vm_service_client - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.6+2" watcher: dependency: transitive description: @@ -468,5 +454,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.10.0-110 <2.11.0" + dart: ">=2.12.0-0.0 <=2.12.0-29.10.beta" flutter: ">=1.10.0 <2.0.0" From a3fb0b80067a5c17682b9facd19e395e6d8329af Mon Sep 17 00:00:00 2001 From: sgbasaraner Date: Mon, 15 Feb 2021 10:27:59 +0300 Subject: [PATCH 7/7] cleanup master podspec --- pubspec.lock | 351 +++------------------------------------------------ 1 file changed, 20 insertions(+), 331 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 68f8fcf..cd6330d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,458 +1,147 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - url: "https://pub.dartlang.org" - source: hosted - version: "11.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - url: "https://pub.dartlang.org" - source: hosted - version: "0.40.4" - apple_maps_flutter: - dependency: "direct dev" - description: - path: ".." - relative: true - source: path - version: "0.1.2+5" - archive: - dependency: transitive - description: - name: archive - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.13" - args: - dependency: transitive - description: - name: args - url: "https://pub.dartlang.org" - source: hosted - version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.3" + version: "2.5.0-nullsafety.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.5" + version: "1.1.0-nullsafety.3" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" - cli_util: - dependency: transitive - description: - name: cli_util - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.0" + version: "1.2.0-nullsafety.1" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.5" - convert: - dependency: transitive - description: - name: convert - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.1" - coverage: - dependency: transitive - description: - name: coverage - url: "https://pub.dartlang.org" - source: hosted - version: "0.14.1" - crypto: - dependency: transitive - description: - name: crypto - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.5" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.3" + version: "1.15.0-nullsafety.3" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" - file: - dependency: transitive - description: - name: file - url: "https://pub.dartlang.org" - source: hosted - version: "6.0.0-nullsafety.4" + version: "1.2.0-nullsafety.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" - flutter_driver: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" flutter_test: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fuchsia_remote_debug_protocol: - dependency: transitive + dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - glob: - dependency: transitive - description: - name: glob - url: "https://pub.dartlang.org" - source: hosted - version: "1.2.0" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.0" - http_parser: - dependency: transitive - description: - name: http_parser - url: "https://pub.dartlang.org" - source: hosted - version: "3.1.4" - io: - dependency: transitive - description: - name: io - url: "https://pub.dartlang.org" - source: hosted - version: "0.3.4" - js: - dependency: transitive - description: - name: js - url: "https://pub.dartlang.org" - source: hosted - version: "0.6.3-nullsafety.2" - json_rpc_2: - dependency: transitive - description: - name: json_rpc_2 - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.2" - logging: - dependency: transitive - description: - name: logging - url: "https://pub.dartlang.org" - source: hosted - version: "0.11.4" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.3" + version: "0.12.10-nullsafety.1" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.6" - mime: - dependency: transitive - description: - name: mime - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.7" - node_interop: - dependency: transitive - description: - name: node_interop - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.1" - node_io: - dependency: transitive - description: - name: node_io - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.1" - node_preamble: - dependency: transitive - description: - name: node_preamble - url: "https://pub.dartlang.org" - source: hosted - version: "1.4.12" - package_config: - dependency: transitive - description: - name: package_config - url: "https://pub.dartlang.org" - source: hosted - version: "1.9.3" + version: "1.3.0-nullsafety.3" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.3" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.10.0-nullsafety.2" - platform: - dependency: transitive - description: - name: platform - url: "https://pub.dartlang.org" - source: hosted - version: "3.0.0-nullsafety.4" - pool: - dependency: transitive - description: - name: pool - url: "https://pub.dartlang.org" - source: hosted - version: "1.5.0-nullsafety.2" - process: - dependency: transitive - description: - name: process - url: "https://pub.dartlang.org" - source: hosted - version: "4.0.0-nullsafety.4" - pub_semver: - dependency: transitive - description: - name: pub_semver - url: "https://pub.dartlang.org" - source: hosted - version: "1.4.4" - shelf: - dependency: transitive - description: - name: shelf - url: "https://pub.dartlang.org" - source: hosted - version: "0.7.9" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0" - shelf_static: - dependency: transitive - description: - name: shelf_static - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.8" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.3" + version: "1.8.0-nullsafety.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.0-nullsafety.3" - source_maps: - dependency: transitive - description: - name: source_maps - url: "https://pub.dartlang.org" - source: hosted - version: "0.10.10-nullsafety.2" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.4" + version: "1.8.0-nullsafety.2" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.6" + version: "1.10.0-nullsafety.1" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" - sync_http: - dependency: transitive - description: - name: sync_http - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.0" + version: "1.1.0-nullsafety.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" - test: - dependency: "direct dev" - description: - name: test - url: "https://pub.dartlang.org" - source: hosted - version: "1.16.0-nullsafety.12" + version: "1.2.0-nullsafety.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.6" - test_core: - dependency: transitive - description: - name: test_core - url: "https://pub.dartlang.org" - source: hosted - version: "0.3.12-nullsafety.11" + version: "0.2.19-nullsafety.2" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.5" + version: "1.3.0-nullsafety.3" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.5" - vm_service: - dependency: transitive - description: - name: vm_service - url: "https://pub.dartlang.org" - source: hosted - version: "5.2.0" - watcher: - dependency: transitive - description: - name: watcher - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.7+15" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - url: "https://pub.dartlang.org" - source: hosted - version: "1.1.0" - webdriver: - dependency: transitive - description: - name: webdriver - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.2" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - url: "https://pub.dartlang.org" - source: hosted - version: "0.7.3" - yaml: - dependency: transitive - description: - name: yaml - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.1" + version: "2.1.0-nullsafety.3" sdks: - dart: ">=2.12.0-0.0 <=2.12.0-29.10.beta" + dart: ">=2.10.0-110 <2.11.0" flutter: ">=1.10.0 <2.0.0"