diff --git a/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java b/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java index 22f9d28a8..b05f49dac 100644 --- a/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java +++ b/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java @@ -80,6 +80,7 @@ import io.flutter.plugin.platform.PlatformView; import java.io.IOException; import java.io.InputStream; +import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -1205,6 +1206,32 @@ public void onFailure(@NonNull Exception exception) { result.success(null); break; } + case "style#updateImage": + { + if (style == null) { + result.error( + "STYLE IS NULL", + "The style is null. Has onStyleLoaded() already been invoked?", + null); + } + ImageSource imageSource = style.getSourceAs(call.argument("imageSourceId")); + List coordinates = Convert.toLatLngList(call.argument("coordinates"), false); + if (coordinates != null) { + // https://github.com/mapbox/mapbox-maps-android/issues/302 + imageSource.setCoordinates( + new LatLngQuad( + coordinates.get(0), + coordinates.get(1), + coordinates.get(2), + coordinates.get(3))); + } + String url = call.argument("url"); + if (url != null) { + imageSource.setUri(URI.create(url)); + } + result.success(null); + break; + } case "style#addSource": { final String id = Convert.toString(call.argument("sourceId")); diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 8d4492f97..9625e105d 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 9.0 + 11.0 diff --git a/example/ios/Podfile b/example/ios/Podfile index d523a681f..14b9abd74 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '9.0' +platform :ios, '11.0' use_frameworks! # CocoaPods analytics sends network stats synchronously affecting flutter build latency. diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 846740d33..99e12639b 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -360,7 +360,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -439,7 +439,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -488,7 +488,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/example/lib/main.dart b/example/lib/main.dart index e28938b2c..a931928d4 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -25,7 +25,8 @@ import 'page.dart'; import 'place_batch.dart'; import 'place_circle.dart'; import 'place_fill.dart'; -import 'place_source.dart'; +import 'place_asset_source.dart'; +import 'place_remote_source.dart'; import 'place_symbol.dart'; import 'scrolling_map.dart'; import 'sources.dart'; @@ -37,7 +38,8 @@ final List _allPages = [ AnimateCameraPage(), MoveCameraPage(), PlaceSymbolPage(), - PlaceSourcePage(), + PlaceAssetSourcePage(), + PlaceRemoteSourcePage(), LinePage(), LocalStylePage(), LayerPage(), diff --git a/example/lib/place_source.dart b/example/lib/place_asset_source.dart similarity index 97% rename from example/lib/place_source.dart rename to example/lib/place_asset_source.dart index 428dc74aa..17e459564 100644 --- a/example/lib/place_source.dart +++ b/example/lib/place_asset_source.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'dart:async'; +// ignore: unnecessary_import import 'dart:typed_data'; import 'package:flutter/material.dart'; @@ -12,8 +13,8 @@ import 'package:mapbox_gl/mapbox_gl.dart'; import 'main.dart'; import 'page.dart'; -class PlaceSourcePage extends ExamplePage { - PlaceSourcePage() : super(const Icon(Icons.place), 'Place source'); +class PlaceAssetSourcePage extends ExamplePage { + PlaceAssetSourcePage() : super(const Icon(Icons.place), 'Place asset source'); @override Widget build(BuildContext context) { diff --git a/example/lib/place_remote_source.dart b/example/lib/place_remote_source.dart new file mode 100644 index 000000000..2d856e6b1 --- /dev/null +++ b/example/lib/place_remote_source.dart @@ -0,0 +1,192 @@ +// 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'; +// ignore: unnecessary_import + +import 'package:flutter/material.dart'; +import 'package:mapbox_gl/mapbox_gl.dart'; + +import 'main.dart'; +import 'page.dart'; + +class PlaceRemoteSourcePage extends ExamplePage { + PlaceRemoteSourcePage() + : super(const Icon(Icons.place), 'Place remote source'); + + @override + Widget build(BuildContext context) { + return const PlaceSymbolBody(); + } +} + +class PlaceSymbolBody extends StatefulWidget { + const PlaceSymbolBody(); + + @override + State createState() => PlaceSymbolBodyState(); +} + +class PlaceSymbolBodyState extends State { + PlaceSymbolBodyState(); + + static const SOURCE_ID = 'sydney_source'; + static const LAYER_ID = 'sydney_layer'; + + bool sourceAdded = false; + bool layerAdded = false; + late MapboxMapController controller; + + void _onMapCreated(MapboxMapController controller) { + this.controller = controller; + } + + @override + void dispose() { + super.dispose(); + } + + /// Adds an remote image as a source to the currently displayed style + Future addImageSourceFromRemote( + String imageSourceId, String url) async { + controller.addSource( + SOURCE_ID, + ImageSourceProperties(url: url, coordinates: [ + [151.2288236618042, -33.84322353475214], + [151.19916915893555, -33.84322353475214], + [151.19916915893555, -33.86264728692581], + [151.2288236618042, -33.86264728692581] + ])); + } + + /// Update an remote image as a source to the currently displayed style + Future updateImageSourceFromRemote( + String imageSourceId, String url) async { + controller.updateImage( + imageSourceId, + url: url, + coordinates: const LatLngQuad( + topLeft: LatLng(-33.89884564291081, 151.25229835510254), + topRight: LatLng(-33.89884564291081, 151.20131492614746), + bottomRight: LatLng(-33.934601369931634, 151.20131492614746), + bottomLeft: LatLng(-33.934601369931634, 151.25229835510254), + ), + ); + } + + Future removeImageSource(String imageSourceId) { + return controller.removeSource(imageSourceId); + } + + Future addLayer(String imageLayerId, String imageSourceId) { + if (layerAdded) { + removeLayer(imageLayerId); + } + setState(() => layerAdded = true); + return controller.addLayer(imageSourceId, imageLayerId, + RasterLayerProperties(rasterFadeDuration: 0)); + } + + Future addLayerBelow( + String imageLayerId, String imageSourceId, String belowLayerId) { + if (layerAdded) { + removeLayer(imageLayerId); + } + setState(() => layerAdded = true); + return controller.addLayer(imageSourceId, imageLayerId, + RasterLayerProperties(rasterFadeDuration: 0), + belowLayerId: belowLayerId); + } + + Future removeLayer(String imageLayerId) { + setState(() => layerAdded = false); + return controller.removeLayer(imageLayerId); + } + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + SizedBox( + height: 300.0, + child: MapboxMap( + accessToken: MapsDemo.ACCESS_TOKEN, + onMapCreated: _onMapCreated, + initialCameraPosition: const CameraPosition( + target: LatLng(-33.852, 151.211), + zoom: 10.0, + ), + ), + ), + Expanded( + child: SingleChildScrollView( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Column( + children: [ + TextButton( + child: const Text('Add source (remote image)'), + onPressed: sourceAdded + ? null + : () { + addImageSourceFromRemote(SOURCE_ID, + 'https://media-cdn.tripadvisor.com/media/photo-s/03/9b/2e/15/sydney.jpg') + .then((value) { + setState(() => sourceAdded = true); + }); + }, + ), + TextButton( + child: const Text('Update source (remote image)'), + onPressed: !sourceAdded + ? null + : () { + updateImageSourceFromRemote(SOURCE_ID, + 'https://media.istockphoto.com/photos/view-of-sydney-harbour-australia-picture-id535455441?k=20&m=535455441&s=612x612&w=0&h=9eDvK_3h-KKHJEOLlOL2kFxtg0y95MXacEyFpHzu-9s=') + .then((value) { + setState(() => sourceAdded = true); + }); + }, + ), + TextButton( + child: const Text('Remove source (remote image)'), + onPressed: sourceAdded + ? () async { + await removeLayer(LAYER_ID); + removeImageSource(SOURCE_ID).then((value) { + setState(() => sourceAdded = false); + }); + } + : null, + ), + TextButton( + child: const Text('Show layer'), + onPressed: sourceAdded + ? () => addLayer(LAYER_ID, SOURCE_ID) + : null, + ), + TextButton( + child: const Text('Show layer below water'), + onPressed: sourceAdded + ? () => addLayerBelow(LAYER_ID, SOURCE_ID, 'water') + : null, + ), + TextButton( + child: const Text('Hide layer'), + onPressed: + sourceAdded ? () => removeLayer(LAYER_ID) : null, + ), + ], + ), + ], + ), + ), + ), + ], + ); + } +} diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 331479d39..ef1b05f47 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -26,10 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; }; - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; }; - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -49,8 +45,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */, - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */, ); name = "Bundle Framework"; runOnlyForDeploymentPostprocessing = 0; @@ -69,13 +63,11 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,8 +75,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */, - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -138,8 +128,6 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - D73912EF22F37F9E000D13A0 /* App.framework */, - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */, ); path = Flutter; sourceTree = ""; @@ -260,7 +248,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; diff --git a/ios/Classes/MapboxMapController.swift b/ios/Classes/MapboxMapController.swift index f9d56dbae..bf24f91bd 100644 --- a/ios/Classes/MapboxMapController.swift +++ b/ios/Classes/MapboxMapController.swift @@ -630,6 +630,38 @@ class MapboxMapController: NSObject, FlutterPlatformView, MGLMapViewDelegate, Ma imageSource.coordinates = quad } result(nil) + case "style#updateImage": + guard let arguments = methodCall.arguments as? [String: Any] else { return } + guard let imageSourceId = arguments["imageSourceId"] as? String else { return } + guard let imageSource = mapView.style? + .source(withIdentifier: imageSourceId) as? MGLImageSource else { return } + let url = arguments["url"] as? String + if url != nil { + imageSource.url = URL(string: url!) + } + let coordinates = arguments["coordinates"] as? [[Double]] + if coordinates != nil { + let quad = MGLCoordinateQuad( + topLeft: CLLocationCoordinate2D( + latitude: coordinates![0][0], + longitude: coordinates![0][1] + ), + bottomLeft: CLLocationCoordinate2D( + latitude: coordinates![3][0], + longitude: coordinates![3][1] + ), + bottomRight: CLLocationCoordinate2D( + latitude: coordinates![2][0], + longitude: coordinates![2][1] + ), + topRight: CLLocationCoordinate2D( + latitude: coordinates![1][0], + longitude: coordinates![1][1] + ) + ) + imageSource.coordinates = quad + } + result(nil) case "style#removeSource": guard let arguments = methodCall.arguments as? [String: Any] else { return } diff --git a/lib/src/controller.dart b/lib/src/controller.dart index f58a17bb9..ec63e0944 100644 --- a/lib/src/controller.dart +++ b/lib/src/controller.dart @@ -1165,6 +1165,12 @@ class MapboxMapController extends ChangeNotifier { imageSourceId, bytes, coordinates); } + /// Update an image source to the style currently displayed in the map, so that it can later be referred to by the provided id. + Future updateImage(String imageSourceId, + {String? url, LatLngQuad? coordinates}) { + return _mapboxGlPlatform.updateImage(imageSourceId, url, coordinates); + } + /// Removes previously added image source by id @Deprecated("This method was renamed to removeSource") Future removeImageSource(String imageSourceId) { diff --git a/mapbox_gl_platform_interface/lib/src/mapbox_gl_platform_interface.dart b/mapbox_gl_platform_interface/lib/src/mapbox_gl_platform_interface.dart index c542fdea8..d2c75c1b2 100644 --- a/mapbox_gl_platform_interface/lib/src/mapbox_gl_platform_interface.dart +++ b/mapbox_gl_platform_interface/lib/src/mapbox_gl_platform_interface.dart @@ -84,6 +84,9 @@ abstract class MapboxGlPlatform { Future updateImageSource( String imageSourceId, Uint8List? bytes, LatLngQuad? coordinates); + Future updateImage( + String imageSourceId, String? url, LatLngQuad? coordinates); + Future addLayer(String imageLayerId, String imageSourceId, double? minzoom, double? maxzoom); diff --git a/mapbox_gl_platform_interface/lib/src/method_channel_mapbox_gl.dart b/mapbox_gl_platform_interface/lib/src/method_channel_mapbox_gl.dart index ebfe7963b..2fbb1887f 100644 --- a/mapbox_gl_platform_interface/lib/src/method_channel_mapbox_gl.dart +++ b/mapbox_gl_platform_interface/lib/src/method_channel_mapbox_gl.dart @@ -427,6 +427,20 @@ class MethodChannelMapboxGl extends MapboxGlPlatform { } } + @override + Future updateImage( + String imageSourceId, String? url, LatLngQuad? coordinates) async { + try { + return await _channel.invokeMethod('style#updateImage', { + 'imageSourceId': imageSourceId, + 'url': url, + 'coordinates': coordinates?.toList() + }); + } on PlatformException catch (e) { + return new Future.error(e); + } + } + @override Future toScreenLocation(LatLng latLng) async { try { diff --git a/mapbox_gl_web/lib/mapbox_gl_web.dart b/mapbox_gl_web/lib/mapbox_gl_web.dart index 70756d3be..f187f9c8c 100644 --- a/mapbox_gl_web/lib/mapbox_gl_web.dart +++ b/mapbox_gl_web/lib/mapbox_gl_web.dart @@ -8,6 +8,7 @@ import 'dart:html'; import 'dart:js'; import 'dart:js_util'; import 'dart:math'; +// ignore: unnecessary_import import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flutter/services.dart'; diff --git a/mapbox_gl_web/lib/src/mapbox_web_gl_platform.dart b/mapbox_gl_web/lib/src/mapbox_web_gl_platform.dart index 2b4a69f83..f025bc21b 100644 --- a/mapbox_gl_web/lib/src/mapbox_web_gl_platform.dart +++ b/mapbox_gl_web/lib/src/mapbox_web_gl_platform.dart @@ -973,14 +973,37 @@ class MapboxWebGlPlatform extends MapboxGlPlatform Future addImageSource( String imageSourceId, Uint8List bytes, LatLngQuad coordinates) { - // TODO: implement addImageSource - throw UnimplementedError(); + throw UnimplementedError( + "MapboxJS doesn't support add image source with asset"); } Future updateImageSource( String imageSourceId, Uint8List? bytes, LatLngQuad? coordinates) { - // TODO: implement addImageSource - throw UnimplementedError(); + throw UnimplementedError( + "MapboxJS doesn't support update image source with asset"); + } + + @override + Future updateImage( + String imageSourceId, String? url, LatLngQuad? coordinates) async { + final source = _map.getSource(imageSourceId) as ImageSource?; + if (coordinates != null) { + final param = [ + coordinates.topLeft.toGeoJsonCoordinates(), + coordinates.topRight.toGeoJsonCoordinates(), + coordinates.bottomRight.toGeoJsonCoordinates(), + coordinates.bottomLeft.toGeoJsonCoordinates(), + ]; + if (url != null) { + final imageOptions = ImageOptions( + url: url, + coordinates: param, + ); + source?.updateImage(imageOptions); + } else { + source?.setCoordinates(param); + } + } } @override diff --git a/mapbox_gl_web/pubspec.yaml b/mapbox_gl_web/pubspec.yaml index 769890992..a365f1491 100644 --- a/mapbox_gl_web/pubspec.yaml +++ b/mapbox_gl_web/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: git: url: https://github.com/tobrun/flutter-mapbox-gl.git path: mapbox_gl_platform_interface - mapbox_gl_dart: ^0.2.1 + mapbox_gl_dart: ^0.2.2 image: ^3.0.0 dependency_overrides: diff --git a/pubspec.lock b/pubspec.lock index 194fe4780..3b8dc39f7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -14,7 +14,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" collection: dependency: "direct main" description: @@ -80,14 +80,14 @@ packages: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" path: dependency: transitive description: