diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index a6d7dc4..66fb640 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"image_picker_ios","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_ios-0.8.5+6\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.7\\\\","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_android-0.8.5+2\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[],"linux":[],"windows":[],"web":[{"name":"image_picker_for_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.1.8\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]}],"date_created":"2022-09-05 11:10:59.949002","version":"3.0.5"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"image_picker_ios","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_ios-0.8.5+6\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.7\\\\","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_android-0.8.5+2\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[],"linux":[],"windows":[],"web":[{"name":"image_picker_for_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.1.8\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]}],"date_created":"2022-09-05 15:20:35.995199","version":"3.3.0"} \ No newline at end of file diff --git a/example/lib/main.dart b/example/lib/main.dart index 96b8d45..b585e72 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,16 +1,21 @@ 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 = StateProvider.autoDispose((ref) { + return null; +}); void main() { - runApp(const ImagePickerExample()); + runApp(const ProviderScope(child: ImagePickerExample())); } -class ImagePickerExample extends StatelessWidget { +class ImagePickerExample extends ConsumerWidget { const ImagePickerExample({Key? key}) : super(key: key); @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { return MaterialApp( title: 'Flutter Image Picker Example', theme: ThemeData( @@ -22,20 +27,19 @@ class ImagePickerExample extends StatelessWidget { } } -class ImagePickerExampleHomePage extends StatefulWidget { +class ImagePickerExampleHomePage extends ConsumerStatefulWidget { const ImagePickerExampleHomePage({Key? key, required this.title}) : super(key: key); final String title; @override - State createState() => - _ImagePickerExampleHomePageState(); + ImagePickerExampleHomePageState createState() => + ImagePickerExampleHomePageState(); } -class _ImagePickerExampleHomePageState - extends State { - Uint8List? image; +class ImagePickerExampleHomePageState + extends ConsumerState { final double whiteSpace = 20; final double imageWidth = 300; final String placeholder = 'assets/images/placeholder.png'; @@ -44,9 +48,18 @@ class _ImagePickerExampleHomePageState @override Widget build(BuildContext context) { + final imageWatcher = ref.watch(imageProvider); + return Scaffold( appBar: AppBar( title: Text(widget.title), + actions: [ + IconButton( + onPressed: () { + ref.invalidate(imageProvider); + }, + icon: const Icon(Icons.delete)) + ], ), body: Center( child: SingleChildScrollView( @@ -54,7 +67,7 @@ class _ImagePickerExampleHomePageState mainAxisAlignment: MainAxisAlignment.center, children: [ Column(children: [ - if (image == null) ...[ + if (imageWatcher == null) ...[ Image.asset( placeholder, width: imageWidth, @@ -62,7 +75,7 @@ class _ImagePickerExampleHomePageState ) ] else ...[ Image.memory( - image!, + imageWatcher, width: imageWidth, height: imageWidth, ) @@ -98,10 +111,8 @@ class _ImagePickerExampleHomePageState context: context, builder: (BuildContext context) => const ImagePicker()); if (imageInBytes != null) { - if (!listEquals(image, imageInBytes)) { - setState(() { - image = imageInBytes; - }); + if (!listEquals(ref.read(imageProvider), imageInBytes)) { + ref.read(imageProvider.state).state = imageInBytes; } else { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( diff --git a/example/pubspec.lock b/example/pubspec.lock index 692548f..935c52b 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" boolean_selector: dependency: transitive description: @@ -21,21 +21,14 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.1" + version: "1.2.1" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: @@ -63,7 +56,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -90,6 +83,13 @@ 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 @@ -169,28 +169,28 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" material_color_utilities: dependency: transitive description: 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: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" plugin_platform_interface: dependency: transitive description: @@ -198,6 +198,13 @@ 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 @@ -209,7 +216,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.9.0" stack_trace: dependency: transitive description: @@ -217,6 +224,13 @@ 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: @@ -230,21 +244,21 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.9" + version: "0.4.12" typed_data: dependency: transitive description: @@ -261,4 +275,4 @@ packages: version: "2.1.2" sdks: dart: ">=2.17.6 <3.0.0" - flutter: ">=2.8.0" + flutter: ">=3.0.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index d1ad2f0..9f5c9e0 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -39,6 +39,8 @@ dependencies: flutter_image_picker: path: ../ + flutter_riverpod: ^2.0.0-dev.9 + dev_dependencies: flutter_test: sdk: flutter