@@ -100,6 +100,18 @@ class FormBuilderImagePicker extends FormBuilderField<List<dynamic>> {
100
100
/// Either [ImageSourceOption.gallery] , [ImageSourceOption.camera] or both.
101
101
final List <ImageSourceOption > availableImageSources;
102
102
103
+ ///A callback that returns a pickup options
104
+ ///ListTile(inside Wrap) by Default
105
+ ///use optionsBuilder to return a widget of your choice
106
+ final ValueChanged <ImageSourceBottomSheet >? onTap;
107
+
108
+ /// use this callback if you want custom view for options
109
+ /// call cameraPicker() to picks image from camera
110
+ /// call galleryPicker() to picks image from gallery
111
+ final Widget Function (
112
+ FutureVoidCallBack cameraPicker, FutureVoidCallBack galleryPicker)?
113
+ optionsBuilder;
114
+
103
115
FormBuilderImagePicker ({
104
116
Key ? key,
105
117
//From Super
@@ -140,6 +152,8 @@ class FormBuilderImagePicker extends FormBuilderField<List<dynamic>> {
140
152
this .galleryLabel = const Text ('Gallery' ),
141
153
this .bottomSheetPadding = EdgeInsets .zero,
142
154
this .placeholderImage,
155
+ this .onTap,
156
+ this .optionsBuilder,
143
157
this .availableImageSources = const [
144
158
ImageSourceOption .camera,
145
159
ImageSourceOption .gallery,
@@ -197,30 +211,35 @@ class FormBuilderImagePicker extends FormBuilderField<List<dynamic>> {
197
211
onTap: () async {
198
212
final remainingImages =
199
213
maxImages == null ? null : maxImages - value.length;
200
- await showModalBottomSheet <void >(
201
- context: state.context,
202
- builder: (_) {
203
- return ImageSourceBottomSheet (
204
- maxHeight: maxHeight,
205
- maxWidth: maxWidth,
206
- preventPop: preventPop,
207
- remainingImages: remainingImages,
208
- imageQuality: imageQuality,
209
- preferredCameraDevice: preferredCameraDevice,
210
- bottomSheetPadding: bottomSheetPadding,
211
- cameraIcon: cameraIcon,
212
- cameraLabel: cameraLabel,
213
- galleryIcon: galleryIcon,
214
- galleryLabel: galleryLabel,
215
- availableImageSources: availableImageSources,
216
- onImageSelected: (image) {
217
- state.requestFocus ();
218
- field.didChange ([...value, ...image]);
219
- Navigator .pop (state.context);
220
- },
221
- );
214
+
215
+ final imageSourceSheet = ImageSourceBottomSheet (
216
+ maxHeight: maxHeight,
217
+ maxWidth: maxWidth,
218
+ preventPop: preventPop,
219
+ remainingImages: remainingImages,
220
+ imageQuality: imageQuality,
221
+ preferredCameraDevice: preferredCameraDevice,
222
+ bottomSheetPadding: bottomSheetPadding,
223
+ cameraIcon: cameraIcon,
224
+ cameraLabel: cameraLabel,
225
+ galleryIcon: galleryIcon,
226
+ galleryLabel: galleryLabel,
227
+ optionsBuilder: optionsBuilder,
228
+ availableImageSources: availableImageSources,
229
+ onImageSelected: (image) {
230
+ state.requestFocus ();
231
+ field.didChange ([...value, ...image]);
232
+ Navigator .pop (state.context);
222
233
},
223
234
);
235
+ onTap != null
236
+ ? onTap (imageSourceSheet)
237
+ : await showModalBottomSheet <void >(
238
+ context: state.context,
239
+ builder: (_) {
240
+ return imageSourceSheet;
241
+ },
242
+ );
224
243
},
225
244
);
226
245
0 commit comments