Skip to content

Commit 68981fd

Browse files
authored
Added additional ImagePicker configuration to the FormBuilderImagePicker. (#314)
1 parent f27af78 commit 68981fd

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

lib/src/fields/form_builder_image_picker.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_form_builder/flutter_form_builder.dart';
33
import 'package:flutter_form_builder/src/widgets/image_source_sheet.dart';
4+
import 'package:image_picker/image_picker.dart';
45

56
class FormBuilderImagePicker extends StatefulWidget {
67
final String attribute;
@@ -19,6 +20,23 @@ class FormBuilderImagePicker extends StatefulWidget {
1920
final EdgeInsets imageMargin;
2021
final Color iconColor;
2122

23+
/// Optional maximum height of image; see [ImagePicker].
24+
final double maxHeight;
25+
26+
/// Optional maximum width of image; see [ImagePicker].
27+
final double maxWidth;
28+
29+
/// The imageQuality argument modifies the quality of the image, ranging from
30+
/// 0-100 where 100 is the original/max quality. If imageQuality is null, the
31+
/// image with the original quality will be returned. See [ImagePicker].
32+
final int imageQuality;
33+
34+
/// Use preferredCameraDevice to specify the camera to use when the source is
35+
/// `ImageSource.camera`. The preferredCameraDevice is ignored when source is
36+
/// `ImageSource.gallery`. It is also ignored if the chosen camera is not
37+
/// supported on the device. Defaults to `CameraDevice.rear`. See [ImagePicker].
38+
final CameraDevice preferredCameraDevice;
39+
2240
const FormBuilderImagePicker({
2341
Key key,
2442
@required this.attribute,
@@ -34,6 +52,10 @@ class FormBuilderImagePicker extends StatefulWidget {
3452
this.onSaved,
3553
this.decoration = const InputDecoration(),
3654
this.iconColor,
55+
this.maxHeight,
56+
this.maxWidth,
57+
this.imageQuality,
58+
this.preferredCameraDevice = CameraDevice.rear,
3759
}) : super(key: key);
3860

3961
@override
@@ -161,6 +183,11 @@ class _FormBuilderImagePickerState extends State<FormBuilderImagePicker> {
161183
context: context,
162184
builder: (_) {
163185
return ImageSourceSheet(
186+
maxHeight: widget.maxHeight,
187+
maxWidth: widget.maxWidth,
188+
imageQuality: widget.imageQuality,
189+
preferredCameraDevice:
190+
widget.preferredCameraDevice,
164191
onImageSelected: (image) {
165192
field.didChange(
166193
[...field.value, image]);

lib/src/widgets/image_source_sheet.dart

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ import 'package:flutter/foundation.dart';
55
import 'package:image_picker/image_picker.dart';
66

77
class ImageSourceSheet extends StatelessWidget {
8+
/// Optional maximum height of image
9+
final double maxHeight;
10+
11+
/// Optional maximum width of image
12+
final double maxWidth;
13+
14+
/// The imageQuality argument modifies the quality of the image, ranging from
15+
/// 0-100 where 100 is the original/max quality. If imageQuality is null, the
16+
/// image with the original quality will be returned.
17+
final int imageQuality;
18+
19+
/// Use preferredCameraDevice to specify the camera to use when the source is
20+
/// `ImageSource.camera`. The preferredCameraDevice is ignored when source is
21+
/// `ImageSource.gallery`. It is also ignored if the chosen camera is not
22+
/// supported on the device. Defaults to `CameraDevice.rear`.
23+
final CameraDevice preferredCameraDevice;
24+
825
/// Callback when an image is selected.
926
///
1027
/// **Note**: This will work on web platform whereas [onImageSelected] will not.
@@ -18,14 +35,24 @@ class ImageSourceSheet extends StatelessWidget {
1835

1936
ImageSourceSheet({
2037
Key key,
38+
this.maxHeight,
39+
this.maxWidth,
40+
this.imageQuality,
41+
this.preferredCameraDevice = CameraDevice.rear,
2142
this.onImage,
2243
this.onImageSelected,
2344
}) : assert(null != onImage || null != onImageSelected),
2445
super(key: key);
2546

2647
Future<void> _onPickImage(ImageSource source) async {
2748
final imagePicker = ImagePicker();
28-
final pickedFile = await imagePicker.getImage(source: source);
49+
final pickedFile = await imagePicker.getImage(
50+
source: source,
51+
maxHeight: maxHeight,
52+
maxWidth: maxWidth,
53+
imageQuality: imageQuality,
54+
preferredCameraDevice: preferredCameraDevice,
55+
);
2956
if (null != pickedFile) {
3057
if (null != onImage) {
3158
final image = Image.memory(await pickedFile.readAsBytes());

0 commit comments

Comments
 (0)