[google_maps_flutter] Add documentation (#2303)
diff --git a/packages/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/CHANGELOG.md
index 0bf3943..18becc1 100644
--- a/packages/google_maps_flutter/CHANGELOG.md
+++ b/packages/google_maps_flutter/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.21+13
+
+* Add documentation.
+
## 0.5.21+12
* Update driver tests in the example app to e2e tests.
diff --git a/packages/google_maps_flutter/analysis_options.yaml b/packages/google_maps_flutter/analysis_options.yaml
deleted file mode 100644
index d4ccef6..0000000
--- a/packages/google_maps_flutter/analysis_options.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-# This is a temporary file to allow us to land a new set of linter rules in a
-# series of manageable patches instead of one gigantic PR. It disables some of
-# the new lints that are already failing on this plugin, for this plugin. It
-# should be deleted and the failing lints addressed as soon as possible.
-
-include: ../../analysis_options.yaml
-
-analyzer:
- errors:
- public_member_api_docs: ignore
- unawaited_futures: ignore
diff --git a/packages/google_maps_flutter/example/lib/animate_camera.dart b/packages/google_maps_flutter/example/lib/animate_camera.dart
index fe4283d..f131c13 100644
--- a/packages/google_maps_flutter/example/lib/animate_camera.dart
+++ b/packages/google_maps_flutter/example/lib/animate_camera.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/main.dart b/packages/google_maps_flutter/example/lib/main.dart
index c082f18..f4b8776 100644
--- a/packages/google_maps_flutter/example/lib/main.dart
+++ b/packages/google_maps_flutter/example/lib/main.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'animate_camera.dart';
import 'map_click.dart';
diff --git a/packages/google_maps_flutter/example/lib/map_click.dart b/packages/google_maps_flutter/example/lib/map_click.dart
index a73595d..96d239b 100644
--- a/packages/google_maps_flutter/example/lib/map_click.dart
+++ b/packages/google_maps_flutter/example/lib/map_click.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/map_coordinates.dart b/packages/google_maps_flutter/example/lib/map_coordinates.dart
index fd707fb..dcc08f2 100644
--- a/packages/google_maps_flutter/example/lib/map_coordinates.dart
+++ b/packages/google_maps_flutter/example/lib/map_coordinates.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/map_ui.dart b/packages/google_maps_flutter/example/lib/map_ui.dart
index c20aaf2..2a84e71 100644
--- a/packages/google_maps_flutter/example/lib/map_ui.dart
+++ b/packages/google_maps_flutter/example/lib/map_ui.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter/services.dart' show rootBundle;
diff --git a/packages/google_maps_flutter/example/lib/marker_icons.dart b/packages/google_maps_flutter/example/lib/marker_icons.dart
index 7472e8f..ad1ec38 100644
--- a/packages/google_maps_flutter/example/lib/marker_icons.dart
+++ b/packages/google_maps_flutter/example/lib/marker_icons.dart
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+// ignore_for_file: unawaited_futures
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/move_camera.dart b/packages/google_maps_flutter/example/lib/move_camera.dart
index 299ac4b..5b52836 100644
--- a/packages/google_maps_flutter/example/lib/move_camera.dart
+++ b/packages/google_maps_flutter/example/lib/move_camera.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/padding.dart b/packages/google_maps_flutter/example/lib/padding.dart
index 6c1fe38..a9e4e54 100644
--- a/packages/google_maps_flutter/example/lib/padding.dart
+++ b/packages/google_maps_flutter/example/lib/padding.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'page.dart';
diff --git a/packages/google_maps_flutter/example/lib/page.dart b/packages/google_maps_flutter/example/lib/page.dart
index c9f834b..32f3645 100644
--- a/packages/google_maps_flutter/example/lib/page.dart
+++ b/packages/google_maps_flutter/example/lib/page.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
abstract class Page extends StatelessWidget {
diff --git a/packages/google_maps_flutter/example/lib/place_circle.dart b/packages/google_maps_flutter/example/lib/place_circle.dart
index fb9436a..b44413a 100644
--- a/packages/google_maps_flutter/example/lib/place_circle.dart
+++ b/packages/google_maps_flutter/example/lib/place_circle.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/place_marker.dart b/packages/google_maps_flutter/example/lib/place_marker.dart
index f38ee43..ce0f9d4 100644
--- a/packages/google_maps_flutter/example/lib/place_marker.dart
+++ b/packages/google_maps_flutter/example/lib/place_marker.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'dart:async';
import 'dart:math';
import 'dart:ui';
diff --git a/packages/google_maps_flutter/example/lib/place_polygon.dart b/packages/google_maps_flutter/example/lib/place_polygon.dart
index 25818c7..e78fd1c 100644
--- a/packages/google_maps_flutter/example/lib/place_polygon.dart
+++ b/packages/google_maps_flutter/example/lib/place_polygon.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
diff --git a/packages/google_maps_flutter/example/lib/place_polyline.dart b/packages/google_maps_flutter/example/lib/place_polyline.dart
index e2b0d3f..52fc22f 100644
--- a/packages/google_maps_flutter/example/lib/place_polyline.dart
+++ b/packages/google_maps_flutter/example/lib/place_polyline.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'dart:io' show Platform;
import 'package:flutter/material.dart';
diff --git a/packages/google_maps_flutter/example/lib/scrolling_map.dart b/packages/google_maps_flutter/example/lib/scrolling_map.dart
index 9597e46..30359c9 100644
--- a/packages/google_maps_flutter/example/lib/scrolling_map.dart
+++ b/packages/google_maps_flutter/example/lib/scrolling_map.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// ignore_for_file: public_member_api_docs
+
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
diff --git a/packages/google_maps_flutter/example/test_driver/google_maps_e2e_test.dart b/packages/google_maps_flutter/example/test_driver/google_maps_e2e_test.dart
index ff6e9ce..f3aa9e2 100644
--- a/packages/google_maps_flutter/example/test_driver/google_maps_e2e_test.dart
+++ b/packages/google_maps_flutter/example/test_driver/google_maps_e2e_test.dart
@@ -10,6 +10,6 @@
final FlutterDriver driver = await FlutterDriver.connect();
final String result =
await driver.requestData(null, timeout: const Duration(minutes: 1));
- driver.close();
+ await driver.close();
exit(result == 'pass' ? 0 : 1);
}
diff --git a/packages/google_maps_flutter/lib/src/bitmap.dart b/packages/google_maps_flutter/lib/src/bitmap.dart
index e239956..ca6ed6e 100644
--- a/packages/google_maps_flutter/lib/src/bitmap.dart
+++ b/packages/google_maps_flutter/lib/src/bitmap.dart
@@ -10,15 +10,34 @@
class BitmapDescriptor {
const BitmapDescriptor._(this._json);
+ /// Convenience hue value representing red.
static const double hueRed = 0.0;
+
+ /// Convenience hue value representing orange.
static const double hueOrange = 30.0;
+
+ /// Convenience hue value representing yellow.
static const double hueYellow = 60.0;
+
+ /// Convenience hue value representing green.
static const double hueGreen = 120.0;
+
+ /// Convenience hue value representing cyan.
static const double hueCyan = 180.0;
+
+ /// Convenience hue value representing azure.
static const double hueAzure = 210.0;
+
+ /// Convenience hue value representing blue.
static const double hueBlue = 240.0;
+
+ /// Convenience hue value representing violet.
static const double hueViolet = 270.0;
+
+ /// Convenience hue value representing magenta.
static const double hueMagenta = 300.0;
+
+ /// Convenience hue value representing rose.
static const double hueRose = 330.0;
/// Creates a BitmapDescriptor that refers to the default marker image.
diff --git a/packages/google_maps_flutter/lib/src/camera.dart b/packages/google_maps_flutter/lib/src/camera.dart
index 78d624b..043d0f8 100644
--- a/packages/google_maps_flutter/lib/src/camera.dart
+++ b/packages/google_maps_flutter/lib/src/camera.dart
@@ -4,10 +4,15 @@
part of google_maps_flutter;
-/// The position of the map "camera", the view point from which the world is
-/// shown in the map view. Aggregates the camera's [target] geographical
-/// location, its [zoom] level, [tilt] angle, and [bearing].
+/// The position of the map "camera", the view point from which the world is shown in the map view.
+///
+/// Aggregates the camera's [target] geographical location, its [zoom] level,
+/// [tilt] angle, and [bearing].
class CameraPosition {
+ /// Creates a immutable representation of the [GoogleMap] camera.
+ ///
+ /// [AssertionError] is thrown if [bearing], [target], [tilt], or [zoom] are
+ /// null.
const CameraPosition({
this.bearing = 0.0,
@required this.target,
@@ -51,6 +56,9 @@
/// will be silently clamped to the supported range.
final double zoom;
+ /// Serializes [CameraPosition].
+ ///
+ /// Mainly for internal use when calling [CameraUpdate.newCameraPosition].
dynamic toMap() => <String, dynamic>{
'bearing': bearing,
'target': target._toJson(),
@@ -58,6 +66,9 @@
'zoom': zoom,
};
+ /// Deserializes [CameraPosition] from a map.
+ ///
+ /// Mainly for internal use.
static CameraPosition fromMap(dynamic json) {
if (json == null) {
return null;
diff --git a/packages/google_maps_flutter/lib/src/circle.dart b/packages/google_maps_flutter/lib/src/circle.dart
index 1ab966c..0de675d 100644
--- a/packages/google_maps_flutter/lib/src/circle.dart
+++ b/packages/google_maps_flutter/lib/src/circle.dart
@@ -9,6 +9,7 @@
/// This does not have to be globally unique, only unique among the list.
@immutable
class CircleId {
+ /// Creates an immutable identifier for a [Circle].
CircleId(this.value) : assert(value != null);
/// value of the [CircleId].
@@ -34,6 +35,7 @@
/// Draws a circle on the map.
@immutable
class Circle {
+ /// Creates an immutable representation of a [Circle] to draw on [GoogleMap].
const Circle({
@required this.circleId,
this.consumeTapEvents = false,
diff --git a/packages/google_maps_flutter/lib/src/controller.dart b/packages/google_maps_flutter/lib/src/controller.dart
index 4ef8956..c6c64a5 100644
--- a/packages/google_maps_flutter/lib/src/controller.dart
+++ b/packages/google_maps_flutter/lib/src/controller.dart
@@ -14,6 +14,10 @@
channel.setMethodCallHandler(_handleMethodCall);
}
+ /// Initialize control of a [GoogleMap] with [id].
+ ///
+ /// Mainly for internal use when instantiating a [GoogleMapController] passed
+ /// in [GoogleMap.onMapCreated] callback.
static Future<GoogleMapController> init(
int id,
CameraPosition initialCameraPosition,
@@ -30,6 +34,9 @@
);
}
+ /// Used to communicate with the native platform.
+ ///
+ /// Accessible only for testing.
@visibleForTesting
final MethodChannel channel;
diff --git a/packages/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/lib/src/google_map.dart
index fa5c3fd..d1f85a0 100644
--- a/packages/google_maps_flutter/lib/src/google_map.dart
+++ b/packages/google_maps_flutter/lib/src/google_map.dart
@@ -4,6 +4,10 @@
part of google_maps_flutter;
+/// Callback method for when the map is ready to be used.
+///
+/// Pass to [GoogleMap.onMapCreated] to receive a [GoogleMapController] when the
+/// map is created.
typedef void MapCreatedCallback(GoogleMapController controller);
/// Callback that receives updates to the camera position.
@@ -14,7 +18,11 @@
/// This is used in [GoogleMap.onCameraMove].
typedef void CameraPositionCallback(CameraPosition position);
+/// A widget which displays a map with data obtained from the Google Maps service.
class GoogleMap extends StatefulWidget {
+ /// Creates a widget displaying data from Google Maps services.
+ ///
+ /// [AssertionError] will be thrown if [initialCameraPosition] is null;
const GoogleMap({
Key key,
@required this.initialCameraPosition,
@@ -48,6 +56,9 @@
}) : assert(initialCameraPosition != null),
super(key: key);
+ /// Callback method for when the map is ready to be used.
+ ///
+ /// Used to receive a [GoogleMapController] for this [GoogleMap].
final MapCreatedCallback onMapCreated;
/// The initial position of the map's camera.
@@ -179,6 +190,7 @@
/// were not claimed by any other gesture recognizer.
final Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers;
+ /// Creates a [State] for this [GoogleMap].
@override
State createState() => _GoogleMapState();
}
@@ -253,12 +265,14 @@
return;
}
final GoogleMapController controller = await _controller.future;
+ // ignore: unawaited_futures
controller._updateMapOptions(updates);
_googleMapOptions = newOptions;
}
void _updateMarkers() async {
final GoogleMapController controller = await _controller.future;
+ // ignore: unawaited_futures
controller._updateMarkers(
_MarkerUpdates.from(_markers.values.toSet(), widget.markers));
_markers = _keyByMarkerId(widget.markers);
@@ -266,6 +280,7 @@
void _updatePolygons() async {
final GoogleMapController controller = await _controller.future;
+ // ignore: unawaited_futures
controller._updatePolygons(
_PolygonUpdates.from(_polygons.values.toSet(), widget.polygons));
_polygons = _keyByPolygonId(widget.polygons);
@@ -273,6 +288,7 @@
void _updatePolylines() async {
final GoogleMapController controller = await _controller.future;
+ // ignore: unawaited_futures
controller._updatePolylines(
_PolylineUpdates.from(_polylines.values.toSet(), widget.polylines));
_polylines = _keyByPolylineId(widget.polylines);
@@ -280,6 +296,7 @@
void _updateCircles() async {
final GoogleMapController controller = await _controller.future;
+ // ignore: unawaited_futures
controller._updateCircles(
_CircleUpdates.from(_circles.values.toSet(), widget.circles));
_circles = _keyByCircleId(widget.circles);
diff --git a/packages/google_maps_flutter/lib/src/location.dart b/packages/google_maps_flutter/lib/src/location.dart
index f0c6b62..3d1452a 100644
--- a/packages/google_maps_flutter/lib/src/location.dart
+++ b/packages/google_maps_flutter/lib/src/location.dart
@@ -95,6 +95,7 @@
}
}
+ /// Converts a list to [LatLngBounds].
@visibleForTesting
static LatLngBounds fromList(dynamic json) {
if (json == null) {
diff --git a/packages/google_maps_flutter/lib/src/marker.dart b/packages/google_maps_flutter/lib/src/marker.dart
index 5d4d4f3..5690cdd 100644
--- a/packages/google_maps_flutter/lib/src/marker.dart
+++ b/packages/google_maps_flutter/lib/src/marker.dart
@@ -13,6 +13,7 @@
/// Text labels for a [Marker] info window.
class InfoWindow {
+ /// Creates an immutable representation of a label on for [Marker].
const InfoWindow({
this.title,
this.snippet,
@@ -100,6 +101,7 @@
/// This does not have to be globally unique, only unique among the list.
@immutable
class MarkerId {
+ /// Creates an immutable identifier for a [Marker].
MarkerId(this.value) : assert(value != null);
/// value of the [MarkerId].
@@ -146,6 +148,8 @@
/// * has an axis-aligned icon; [rotation] is 0.0
/// * is visible; [visible] is true
/// * is placed at the base of the drawing order; [zIndex] is 0.0
+ /// * reports [onTap] events
+ /// * reports [onDragEnd] events
const Marker({
@required this.markerId,
this.alpha = 1.0,
@@ -217,6 +221,7 @@
/// Callbacks to receive tap events for markers placed on this map.
final VoidCallback onTap;
+ /// Signature reporting the new [LatLng] at the end of a drag event.
final ValueChanged<LatLng> onDragEnd;
/// Creates a new [Marker] object whose values are the same as this instance,
diff --git a/packages/google_maps_flutter/lib/src/pattern_item.dart b/packages/google_maps_flutter/lib/src/pattern_item.dart
index 6d30c72..82e8703 100644
--- a/packages/google_maps_flutter/lib/src/pattern_item.dart
+++ b/packages/google_maps_flutter/lib/src/pattern_item.dart
@@ -9,6 +9,7 @@
class PatternItem {
const PatternItem._(this._json);
+ /// A dot used in the stroke pattern for a [Polyline].
static const PatternItem dot = PatternItem._(<dynamic>['dot']);
/// A dash used in the stroke pattern for a [Polyline].
diff --git a/packages/google_maps_flutter/lib/src/polygon.dart b/packages/google_maps_flutter/lib/src/polygon.dart
index 4aed3bd..e6b26ca 100644
--- a/packages/google_maps_flutter/lib/src/polygon.dart
+++ b/packages/google_maps_flutter/lib/src/polygon.dart
@@ -9,6 +9,7 @@
/// This does not have to be globally unique, only unique among the list.
@immutable
class PolygonId {
+ /// Creates an immutable identifier for a [Polygon].
PolygonId(this.value) : assert(value != null);
/// value of the [PolygonId].
@@ -34,6 +35,7 @@
/// Draws a polygon through geographical locations on the map.
@immutable
class Polygon {
+ /// Creates an immutable representation of a polygon through geographical locations on the map.
const Polygon({
@required this.polygonId,
this.consumeTapEvents = false,
diff --git a/packages/google_maps_flutter/lib/src/polyline.dart b/packages/google_maps_flutter/lib/src/polyline.dart
index 1eac145..0d7684f 100644
--- a/packages/google_maps_flutter/lib/src/polyline.dart
+++ b/packages/google_maps_flutter/lib/src/polyline.dart
@@ -9,6 +9,9 @@
/// This does not have to be globally unique, only unique among the list.
@immutable
class PolylineId {
+ /// Creates an immutable object representing a [PolylineId] among [GoogleMap] polylines.
+ ///
+ /// An [AssertionError] will be thrown if [value] is null.
PolylineId(this.value) : assert(value != null);
/// value of the [PolylineId].
@@ -34,6 +37,7 @@
/// Draws a line through geographical locations on the map.
@immutable
class Polyline {
+ /// Creates an immutable object representing a line drawn through geographical locations on the map.
const Polyline({
@required this.polylineId,
this.consumeTapEvents = false,
diff --git a/packages/google_maps_flutter/lib/src/screen_coordinate.dart b/packages/google_maps_flutter/lib/src/screen_coordinate.dart
index 83e5751..e58abe9 100644
--- a/packages/google_maps_flutter/lib/src/screen_coordinate.dart
+++ b/packages/google_maps_flutter/lib/src/screen_coordinate.dart
@@ -11,12 +11,16 @@
/// corresponds to top-left of the [GoogleMap] not the whole screen.
@immutable
class ScreenCoordinate {
+ /// Creates an immutable representation of a point coordinate in the [GoogleMap]'s view.
const ScreenCoordinate({
@required this.x,
@required this.y,
});
+ /// Represents the number of pixels from the left of the [GoogleMap].
final int x;
+
+ /// Represents the number of pixels from the top of the [GoogleMap].
final int y;
dynamic _toJson() {
diff --git a/packages/google_maps_flutter/lib/src/ui.dart b/packages/google_maps_flutter/lib/src/ui.dart
index 1fb18a0..4b57ebd 100644
--- a/packages/google_maps_flutter/lib/src/ui.dart
+++ b/packages/google_maps_flutter/lib/src/ui.dart
@@ -66,6 +66,9 @@
// distinguishing between specifying unbounded zooming (null `minZoom` and
// `maxZoom`) from not specifying anything (null `MinMaxZoomPreference`).
class MinMaxZoomPreference {
+ /// Creates a immutable representation of the preferred minimum and maximum zoom values for the map camera.
+ ///
+ /// [AssertionError] will be thrown if [minZoom] > [maxZoom].
const MinMaxZoomPreference(this.minZoom, this.maxZoom)
: assert(minZoom == null || maxZoom == null || minZoom <= maxZoom);
@@ -103,7 +106,9 @@
/// See also: `setStyle` on [GoogleMapController] for why this exception
/// might be thrown.
class MapStyleException implements Exception {
+ /// Default constructor for [MapStyleException].
const MapStyleException(this.cause);
+ /// The reason `GoogleMapController.setStyle` would throw this exception.
final String cause;
}
diff --git a/packages/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/pubspec.yaml
index 320e942..1a95ba6 100644
--- a/packages/google_maps_flutter/pubspec.yaml
+++ b/packages/google_maps_flutter/pubspec.yaml
@@ -2,7 +2,7 @@
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
author: Flutter Team <flutter-dev@googlegroups.com>
homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter
-version: 0.5.21+12
+version: 0.5.21+13
dependencies:
flutter: