@@ -5,7 +5,7 @@ import 'package:flutter/foundation.dart';
5
5
import 'package:flutter/material.dart' ;
6
6
import 'package:image_picker/image_picker.dart' ;
7
7
8
- class ImageSourceBottomSheet extends StatelessWidget {
8
+ class ImageSourceBottomSheet extends StatefulWidget {
9
9
/// Optional maximum height of image
10
10
final double maxHeight;
11
11
@@ -39,8 +39,6 @@ class ImageSourceBottomSheet extends StatelessWidget {
39
39
final Widget cameraLabel;
40
40
final Widget galleryLabel;
41
41
final EdgeInsets bottomSheetPadding;
42
-
43
- bool _isPickingImage = false ;
44
42
45
43
ImageSourceBottomSheet ({
46
44
Key key,
@@ -58,30 +56,37 @@ class ImageSourceBottomSheet extends StatelessWidget {
58
56
}) : assert (null != onImage || null != onImageSelected),
59
57
super (key: key);
60
58
59
+ @override
60
+ _ImageSourceBottomSheetState createState () => _ImageSourceBottomSheetState ();
61
+ }
62
+
63
+ class _ImageSourceBottomSheetState extends State <ImageSourceBottomSheet > {
64
+ bool _isPickingImage = false ;
65
+
61
66
Future <void > _onPickImage (ImageSource source) async {
62
- if (_isPickingImage) return ;
67
+ if (_isPickingImage) return ;
63
68
_isPickingImage = true ;
64
69
final imagePicker = ImagePicker ();
65
70
final pickedFile = await imagePicker.getImage (
66
71
source: source,
67
- maxHeight: maxHeight,
68
- maxWidth: maxWidth,
69
- imageQuality: imageQuality,
70
- preferredCameraDevice: preferredCameraDevice,
72
+ maxHeight: widget. maxHeight,
73
+ maxWidth: widget. maxWidth,
74
+ imageQuality: widget. imageQuality,
75
+ preferredCameraDevice: widget. preferredCameraDevice,
71
76
);
72
77
_isPickingImage = false ;
73
78
if (null != pickedFile) {
74
79
if (kIsWeb) {
75
- if (null != onImage) {
76
- onImage (await pickedFile.readAsBytes ());
80
+ if (null != widget. onImage) {
81
+ widget. onImage (await pickedFile.readAsBytes ());
77
82
}
78
83
} else {
79
- if (null != onImageSelected) {
84
+ if (null != widget. onImageSelected) {
80
85
// Warning: this will not work on the web platform because pickedFile
81
86
// will instead point to a network resource.
82
87
final imageFile = File (pickedFile.path);
83
88
assert (null != imageFile);
84
- onImageSelected (imageFile);
89
+ widget. onImageSelected (imageFile);
85
90
}
86
91
}
87
92
}
@@ -92,21 +97,22 @@ class ImageSourceBottomSheet extends StatelessWidget {
92
97
return WillPopScope (
93
98
onWillPop: () async => ! _isPickingImage,
94
99
child: Container (
95
- padding: bottomSheetPadding,
100
+ padding: widget. bottomSheetPadding,
96
101
child: Wrap (
97
102
children: < Widget > [
98
103
ListTile (
99
- leading: cameraIcon,
100
- title: cameraLabel,
104
+ leading: widget. cameraIcon,
105
+ title: widget. cameraLabel,
101
106
onTap: () => _onPickImage (ImageSource .camera),
102
107
),
103
108
ListTile (
104
- leading: galleryIcon,
105
- title: galleryLabel,
109
+ leading: widget. galleryIcon,
110
+ title: widget. galleryLabel,
106
111
onTap: () => _onPickImage (ImageSource .gallery),
107
112
)
108
113
],
109
114
),
115
+ ),
110
116
);
111
117
}
112
118
}
0 commit comments