added imageprovider

This commit is contained in:
commitimpush 2022-09-06 11:28:53 +02:00
parent 5a8d1da467
commit 0eae6bffad
4 changed files with 63 additions and 36 deletions

View file

@ -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"}
{"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"}

View file

@ -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<Uint8List?>((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<ImagePickerExampleHomePage> createState() =>
_ImagePickerExampleHomePageState();
ImagePickerExampleHomePageState createState() =>
ImagePickerExampleHomePageState();
}
class _ImagePickerExampleHomePageState
extends State<ImagePickerExampleHomePage> {
Uint8List? image;
class ImagePickerExampleHomePageState
extends ConsumerState<ImagePickerExampleHomePage> {
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: <Widget>[
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(

View file

@ -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"

View file

@ -39,6 +39,8 @@ dependencies:
flutter_image_picker:
path: ../
flutter_riverpod: ^2.0.0-dev.9
dev_dependencies:
flutter_test:
sdk: flutter