diff --git a/.github/workflows/flutter.yml b/.github/workflows/flutter.yml new file mode 100644 index 0000000..50bb90a --- /dev/null +++ b/.github/workflows/flutter.yml @@ -0,0 +1,32 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: + - master + - feature/* + - bugfix/* + - hotfix/* + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/cache@v3 + with: + path: | + ~/.gradle/wrapper + /opt/hostedtoolcache/flutter + key: ${{ runner.OS }}-flutter-install-cache + - uses: subosito/flutter-action@v2 + with: + channel: 'stable' + - name: Flutter pub get + run: flutter pub get + - name: Flutter format + run: flutter format -o none --set-exit-if-changed . + - name: Flutter analyze + run: flutter analyze diff --git a/README.md b/README.md index 557ba6c..7d22819 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,27 @@ +[![pub package](https://img.shields.io/pub/v/flutter_introduction_widget.svg)](https://github.com/Iconica-Development) [![Build status](https://img.shields.io/github/workflow/status/Iconica-Development/flutter_introduction_widget/CI)](https://github.com/Iconica-Development/flutter_introduction_widget/actions/new) [![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://github.com/tenhobi/effective_dart) + # Flutter Image Picker -Flutter Image Picker is a package you can use to implement an Image Picker in your Flutter app. +Image Picker that can be used to pick an image from storage or make a picture with your camera. This package is built with Flutter and is customizable with icons, descriptions and sizes. -![Gif](example/gif/ImagePickerGif.gif) - -## Features - -With the Flutter Image Picker you can select an existing picture from the gallery of your device or make a picture with the camera to use in your app. This package is made for Android, iOS and Windows. +![Image Picker GIF](flutter_image_picker.gif) ## Setup -To use this package, add `flutter_image_picker` as a [dependency in your pubspec.yaml file](https://flutter.dev/docs/development/platform-integration/platform-channels). +To use this package, add `flutter_image_picker` as a dependency in your pubspec.yaml file. -## How To Use +## How to use See the [Example Code](example/lib/main.dart) for an example on how to use this package. -You can add an optional `ImagePickerTheme()` to the `ImagePicker()` to change the layout of the Image Picker Dialog. You can add the following parameters to the `ImagePickerTheme`: -An example on how to add a parameter to the `ImagePickerTheme()` is: `ImagePickerTheme(imagePickerTheme: const ImagePickerTheme(title: "Image Picker"))`. -As a whole you get `ImagePicker(ImagePickerTheme(imagePickerTheme: const ImagePickerTheme(title: "Image Picker")))` - -| Parameter | Explaination | -| -------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| font | The font that is being used in the Image Picker Dialog. | -| title | The title displayed at the top of the Image Picker Dialog. | -| titleTextSize | The font size of the title mentioned above. | -| titleColor | The color of the title text. | -| titleBackgroundColor | The color of the title background. | -| titleAlignment | The alignment of the title text. | -| textColor | The color of the text that is displayed in the Image Picker Dialog. | -| iconColor | The color of the icons that are displayed in the Image Picker Dialog. | -| iconSize | The size of the icons that are visible in the Image Picker Dialog. | -| iconTextSize | The font size of the text underneath the icon buttons. | -| spaceBetweenIcons | The size of the space between the two icons in the Image Picker Dialog. | -| makePhotoIcon | The widget that is displayed for the 'Make Photo' functionality of the Image Picker Dialog. | -| makePhotoText | The text that is displayed underneath the 'Make Photo' icon. | -| selectImageIcon | The widget that is displayed for the 'Select Image From Gallery' functionality of the Image Picker Dialog. | -| selectImageText | The text that is displayed underneath the 'Select Image From Gallery' icon. | -| closeButtonText | The text that is shown on the 'Close Dialog' button at the bottom of the Image Picker Dialog. | -| closeButtonTextSize | The size of the text that is being displayed on the 'Close Dialog' button at the bottom of the Image Picker Dialog. | -| closeButtonTextColor | The color of the text that is being displayed on the 'Close Dialog' button at the bottom of the Image Picker Dialog. | -| closeButtonWidth | The width of the 'Close Dialog' button at the bottom of the Image Picker Dialog. | -| closeButtonHeight | The height of the 'Close Dialog' button at the bottom of the Image Picker Dialog. | -| closeButtonBackgroundColor | The background color of the 'Close Dialog' button at the bottom of the Image Picker Dialog. | - ## Issues -Please file any issues, bugs or feature request as an issue on our [GitHub](https://github.com/Iconica-Development/flutter_image_picker/pulls) page. Commercial support is available if you need help with integration with your app or services. You can contact us at [support@iconica.nl](mailto:support@iconica.nl). +Please file any issues, bugs or feature request as an issue on our [GitHub](https://github.com/Iconica-Development/flutter_introduction_widget) page. Commercial support is available if you need help with integration with your app or services. You can contact us at [support@iconica.nl](mailto:support@iconica.nl). ## Want to contribute -If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our [contribution guide](../CONTRIBUTING.md) and send us your [pull request](https://github.com/Iconica-Development/flutter_image_picker/pulls). +If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our [contribution guide](./CONTRIBUTING.md) and send us your [pull request](https://github.com/Iconica-Development/flutter_introduction_widget/pulls). ## Author -This `flutter-image-picker` for Flutter is developed by [Iconica](https://iconica.nl). You can contact us at +This `flutter_introduction_widget` for Flutter is developed by [Iconica](https://iconica.nl). You can contact us at \ No newline at end of file diff --git a/example/gif/ImagePickerGif.gif b/example/gif/ImagePickerGif.gif deleted file mode 100644 index 6a63edb..0000000 Binary files a/example/gif/ImagePickerGif.gif and /dev/null differ diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 8d4492f..9625e10 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.lock b/example/ios/Podfile.lock new file mode 100644 index 0000000..818eb74 --- /dev/null +++ b/example/ios/Podfile.lock @@ -0,0 +1,22 @@ +PODS: + - Flutter (1.0.0) + - image_picker_ios (0.0.1): + - Flutter + +DEPENDENCIES: + - Flutter (from `Flutter`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" + +SPEC CHECKSUMS: + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb + +PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 + +COCOAPODS: 1.11.3 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index f52377c..22bf95d 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 0FC2B515B107F2CCC9400081 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD964E61DAEEAA6F72EFFC83 /* Pods_Runner.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; @@ -31,6 +32,7 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 37C41588130A4A617D522A7C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -42,6 +44,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BD964E61DAEEAA6F72EFFC83 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C785D1BFD24C97C9AD880AAD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FB7137C291A1A4337E64A2C9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -49,12 +54,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 0FC2B515B107F2CCC9400081 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 16A77C595AC779F26D312E25 /* Pods */ = { + isa = PBXGroup; + children = ( + C785D1BFD24C97C9AD880AAD /* Pods-Runner.debug.xcconfig */, + 37C41588130A4A617D522A7C /* Pods-Runner.release.xcconfig */, + FB7137C291A1A4337E64A2C9 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -72,6 +89,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 16A77C595AC779F26D312E25 /* Pods */, + A130C96F2C16654EE7E802F7 /* Frameworks */, ); sourceTree = ""; }; @@ -98,6 +117,14 @@ path = Runner; sourceTree = ""; }; + A130C96F2C16654EE7E802F7 /* Frameworks */ = { + isa = PBXGroup; + children = ( + BD964E61DAEEAA6F72EFFC83 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -105,12 +132,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 47E642748A60D4513AE80A00 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 27ECA87BE0E31E65D21B232E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -169,6 +198,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 27ECA87BE0E31E65D21B232E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -183,6 +229,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 47E642748A60D4513AE80A00 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -272,7 +340,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; SUPPORTED_PLATFORMS = iphoneos; @@ -349,7 +417,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; @@ -398,7 +466,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; SUPPORTED_PLATFORMS = iphoneos; diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/example/lib/main.dart b/example/lib/main.dart index 66f03b1..856f360 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -5,36 +5,16 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_image_picker/flutter_image_picker.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -final imageProvider = - StateNotifierProvider.autoDispose((ref) { - return ImageNotifier(); -}); - -class ImageNotifier extends StateNotifier { - ImageNotifier() : super(null); - - Uint8List? image; - - void changeImage(Uint8List newImage) { - state = image = newImage; - } - - void cleanImage() { - state = image = null; - } -} void main() { - runApp(const ProviderScope(child: ImagePickerExample())); + runApp(const ImagePickerExample()); } -class ImagePickerExample extends ConsumerWidget { +class ImagePickerExample extends StatelessWidget { const ImagePickerExample({Key? key}) : super(key: key); @override - Widget build(BuildContext context, WidgetRef ref) { + Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Image Picker Example', theme: ThemeData( @@ -46,7 +26,7 @@ class ImagePickerExample extends ConsumerWidget { } } -class ImagePickerExampleHomePage extends ConsumerStatefulWidget { +class ImagePickerExampleHomePage extends StatefulWidget { const ImagePickerExampleHomePage({Key? key, required this.title}) : super(key: key); @@ -58,24 +38,26 @@ class ImagePickerExampleHomePage extends ConsumerStatefulWidget { } class ImagePickerExampleHomePageState - extends ConsumerState { + extends State { final double whiteSpace = 20; final double imageWidth = 300; final String placeholder = 'assets/images/placeholder.png'; final String imageAlreadyDisplayedMessage = 'The selected image is already being displayed!'; + Uint8List? uploadedImage; + @override Widget build(BuildContext context) { - final imageWatcher = ref.watch(imageProvider); - return Scaffold( appBar: AppBar( title: Text(widget.title), actions: [ IconButton( onPressed: () { - ref.invalidate(imageProvider); + setState(() { + uploadedImage = null; + }); }, icon: const Icon(Icons.delete)) ], @@ -85,9 +67,8 @@ class ImagePickerExampleHomePageState child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - ProviderScope( - child: Column(children: [ - if (imageWatcher == null) ...[ + Column(children: [ + if (uploadedImage == null) ...[ Image.asset( placeholder, width: imageWidth, @@ -95,12 +76,12 @@ class ImagePickerExampleHomePageState ) ] else ...[ Image.memory( - imageWatcher, + uploadedImage!, width: imageWidth, height: imageWidth, ) ] - ])), + ]), SizedBox(height: whiteSpace), const Text( 'Pick an image or make a photo!', @@ -133,8 +114,10 @@ class ImagePickerExampleHomePageState backgroundColor: Colors.white, builder: (BuildContext context) => const ImagePicker()); if (imageInBytes != null) { - if (!listEquals(ref.read(imageProvider), imageInBytes)) { - ref.read(imageProvider.notifier).changeImage(imageInBytes); + if (!listEquals(uploadedImage, imageInBytes)) { + setState(() { + uploadedImage = imageInBytes; + }); } else { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( diff --git a/example/pubspec.lock b/example/pubspec.lock index cc1a00f..95d0c72 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -83,13 +83,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.7" - flutter_riverpod: - dependency: "direct main" - description: - name: flutter_riverpod - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0-dev.9" flutter_test: dependency: "direct dev" description: flutter @@ -120,7 +113,7 @@ packages: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.8.5+3" + version: "0.8.6" image_picker_android: dependency: transitive description: @@ -141,7 +134,7 @@ packages: name: image_picker_ios url: "https://pub.dartlang.org" source: hosted - version: "0.8.5+6" + version: "0.8.6+1" image_picker_platform_interface: dependency: transitive description: @@ -198,13 +191,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" - riverpod: - dependency: transitive - description: - name: riverpod - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.0-dev.9" sky_engine: dependency: transitive description: flutter @@ -224,13 +210,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.10.0" - state_notifier: - dependency: transitive - description: - name: state_notifier - url: "https://pub.dartlang.org" - source: hosted - version: "0.7.2+1" stream_channel: dependency: transitive description: @@ -275,4 +254,4 @@ packages: version: "2.1.2" sdks: dart: ">=2.17.6 <3.0.0" - flutter: ">=3.0.0" + flutter: ">=2.10.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 9f5c9e0..d1ad2f0 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -39,8 +39,6 @@ dependencies: flutter_image_picker: path: ../ - flutter_riverpod: ^2.0.0-dev.9 - dev_dependencies: flutter_test: sdk: flutter diff --git a/flutter_image_picker.gif b/flutter_image_picker.gif new file mode 100644 index 0000000..8d1b43e Binary files /dev/null and b/flutter_image_picker.gif differ diff --git a/pubspec.yaml b/pubspec.yaml index 790e63c..29c8fc3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: flutter: sdk: flutter - image_picker: ^0.8.5+3 + image_picker: ^0.8.6 dev_dependencies: flutter_test: