Skip to content

Commit a886f78

Browse files
committed
Included options to set camera and gallery icons and label
1 parent 9c18abe commit a886f78

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

lib/src/fields/form_builder_image_picker.dart

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ class FormBuilderImagePicker extends StatefulWidget {
3939

4040
final int maxImages;
4141

42+
final Widget cameraIcon;
43+
final Widget galleryIcon;
44+
final Widget cameraLabel;
45+
final Widget galleryLabel;
46+
4247
const FormBuilderImagePicker({
4348
Key key,
4449
@required this.attribute,
@@ -59,6 +64,10 @@ class FormBuilderImagePicker extends StatefulWidget {
5964
this.imageQuality,
6065
this.preferredCameraDevice = CameraDevice.rear,
6166
this.maxImages,
67+
this.cameraIcon = const Icon(Icons.camera_enhance),
68+
this.galleryIcon = const Icon(Icons.image),
69+
this.cameraLabel = const Text('Camera'),
70+
this.galleryLabel = const Text('Gallery'),
6271
}) : super(key: key);
6372

6473
@override
@@ -121,6 +130,8 @@ class _FormBuilderImagePickerState extends State<FormBuilderImagePicker> {
121130
}
122131
},
123132
builder: (field) {
133+
var theme = Theme.of(context);
134+
124135
return InputDecorator(
125136
decoration: widget.decoration.copyWith(
126137
enabled: !_readOnly,
@@ -131,9 +142,7 @@ class _FormBuilderImagePickerState extends State<FormBuilderImagePicker> {
131142
child: Column(
132143
crossAxisAlignment: CrossAxisAlignment.start,
133144
children: <Widget>[
134-
const SizedBox(
135-
height: 8,
136-
),
145+
const SizedBox(height: 8),
137146
Container(
138147
height: widget.imageHeight,
139148
child: ListView(
@@ -183,24 +192,26 @@ class _FormBuilderImagePickerState extends State<FormBuilderImagePicker> {
183192
height: widget.imageHeight,
184193
child: Icon(Icons.camera_enhance,
185194
color: _readOnly
186-
? Theme.of(context).disabledColor
187-
: widget.iconColor ??
188-
Theme.of(context).primaryColor),
195+
? theme.disabledColor
196+
: widget.iconColor ?? theme.primaryColor),
189197
color: (_readOnly
190-
? Theme.of(context).disabledColor
191-
: widget.iconColor ??
192-
Theme.of(context).primaryColor)
198+
? theme.disabledColor
199+
: widget.iconColor ?? theme.primaryColor)
193200
.withAlpha(50)),
194201
onTap: () {
195202
showModalBottomSheet(
196203
context: context,
197204
builder: (_) {
198-
return ImageSourceSheet(
205+
return ImageSourceBottomSheet(
199206
maxHeight: widget.maxHeight,
200207
maxWidth: widget.maxWidth,
201208
imageQuality: widget.imageQuality,
202209
preferredCameraDevice:
203210
widget.preferredCameraDevice,
211+
cameraIcon: widget.cameraIcon,
212+
galleryIcon: widget.galleryIcon,
213+
cameraLabel: widget.cameraLabel,
214+
galleryLabel: widget.galleryLabel,
204215
onImageSelected: (image) {
205216
field.didChange([...field.value, image]);
206217
widget.onChanged?.call(field.value);

lib/src/widgets/image_source_sheet.dart

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import 'dart:io';
22

3-
import 'package:flutter/material.dart';
43
import 'package:flutter/foundation.dart';
4+
import 'package:flutter/material.dart';
55
import 'package:image_picker/image_picker.dart';
66

7-
class ImageSourceSheet extends StatelessWidget {
7+
class ImageSourceBottomSheet extends StatelessWidget {
88
/// Optional maximum height of image
99
final double maxHeight;
1010

@@ -33,14 +33,23 @@ class ImageSourceSheet extends StatelessWidget {
3333
/// available.
3434
final Function(File) onImageSelected;
3535

36-
ImageSourceSheet({
36+
final Widget cameraIcon;
37+
final Widget galleryIcon;
38+
final Widget cameraLabel;
39+
final Widget galleryLabel;
40+
41+
ImageSourceBottomSheet({
3742
Key key,
3843
this.maxHeight,
3944
this.maxWidth,
4045
this.imageQuality,
4146
this.preferredCameraDevice = CameraDevice.rear,
4247
this.onImage,
4348
this.onImageSelected,
49+
this.cameraIcon,
50+
this.galleryIcon,
51+
this.cameraLabel,
52+
this.galleryLabel,
4453
}) : assert(null != onImage || null != onImageSelected),
4554
super(key: key);
4655

@@ -74,16 +83,17 @@ class ImageSourceSheet extends StatelessWidget {
7483
@override
7584
Widget build(BuildContext context) {
7685
return Container(
86+
padding: EdgeInsets.only(bottom: 20),
7787
child: Wrap(
7888
children: <Widget>[
7989
ListTile(
80-
leading: const Icon(Icons.camera_enhance),
81-
title: Text('Camera'),
90+
leading: cameraIcon,
91+
title: cameraLabel,
8292
onTap: () => _onPickImage(ImageSource.camera),
8393
),
8494
ListTile(
85-
leading: const Icon(Icons.image),
86-
title: Text('Gallery'),
95+
leading: galleryIcon,
96+
title: galleryLabel,
8797
onTap: () => _onPickImage(ImageSource.gallery),
8898
)
8999
],

0 commit comments

Comments
 (0)