@@ -71,6 +71,9 @@ class FormBuilderFilePicker
71
71
/// to support user interactions with the picked files.
72
72
final FileViewerBuilder ? customFileViewerBuilder;
73
73
74
+ /// Allow to customise the view of the pickers.
75
+ final Widget Function (List <Widget > types)? customTypeViewerBuilder;
76
+
74
77
/// Creates field for image(s) from user device storage
75
78
FormBuilderFilePicker ({
76
79
//From Super
@@ -98,6 +101,7 @@ class FormBuilderFilePicker
98
101
this .onFileLoading,
99
102
this .allowCompression = true ,
100
103
this .customFileViewerBuilder,
104
+ this .customTypeViewerBuilder
101
105
}) : super (
102
106
builder: (FormFieldState <List <PlatformFile >?> field) {
103
107
final state = field as _FormBuilderFilePickerState ;
@@ -109,20 +113,11 @@ class FormBuilderFilePicker
109
113
: null ),
110
114
child: Column (
111
115
children: < Widget > [
112
- Row (
116
+ customTypeViewerBuilder != null
117
+ ? customTypeViewerBuilder (state.getTypeSelectorActions (typeSelectors, field))
118
+ : Row (
113
119
mainAxisAlignment: MainAxisAlignment .spaceBetween,
114
- children: < Widget > [
115
- ...typeSelectors.map (
116
- (typeSelector) => InkWell (
117
- onTap: state.enabled &&
118
- (null == state._remainingItemCount ||
119
- state._remainingItemCount! > 0 )
120
- ? () => state.pickFiles (field, typeSelector.type)
121
- : null ,
122
- child: typeSelector.selector,
123
- ),
124
- ),
125
- ],
120
+ children: state.getTypeSelectorActions (typeSelectors, field),
126
121
),
127
122
const SizedBox (height: 3 ),
128
123
customFileViewerBuilder != null
@@ -305,6 +300,22 @@ class _FormBuilderFilePickerState extends FormBuilderFieldDecorationState<
305
300
);
306
301
}
307
302
303
+ List <Widget > getTypeSelectorActions (List <TypeSelector > typeSelectors, FormFieldState <List <PlatformFile >?> field) {
304
+ return < Widget > [
305
+ ...typeSelectors.map (
306
+ (typeSelector) =>
307
+ InkWell (
308
+ onTap: enabled &&
309
+ (null == _remainingItemCount ||
310
+ _remainingItemCount! > 0 )
311
+ ? () => pickFiles (field, typeSelector.type)
312
+ : null ,
313
+ child: typeSelector.selector,
314
+ ),
315
+ ),
316
+ ];
317
+ }
318
+
308
319
IconData getIconData (String fileExtension) {
309
320
final lowerCaseFileExt = fileExtension.toLowerCase ();
310
321
if (imageFileExts.contains (lowerCaseFileExt)) return Icons .image;
0 commit comments