Skip to content

Commit cd52e93

Browse files
committed
feat: support fully custom preview
1 parent facbe5d commit cd52e93

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ packages:
113113
path: ".."
114114
relative: true
115115
source: path
116-
version: "5.0.0"
116+
version: "4.0.0"
117117
http:
118118
dependency: transitive
119119
description:

lib/src/form_builder_image_picker.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
import 'dart:typed_data';
22

33
import 'package:async/async.dart';
4+
import 'package:collection/collection.dart';
45
import 'package:flutter/material.dart';
56
import 'package:flutter_form_builder/flutter_form_builder.dart';
67
import 'package:image_picker/image_picker.dart';
78

89
import 'image_source_option.dart';
910
import 'image_source_sheet.dart';
1011

12+
typedef PreviewBuilder = Widget Function(
13+
BuildContext,
14+
List<Widget> children,
15+
Widget? addButton,
16+
);
17+
1118
/// Field for picking image(s) from Gallery or Camera.
1219
///
1320
/// Field value is a list of objects.
@@ -37,6 +44,9 @@ class FormBuilderImagePicker extends FormBuilderFieldDecoration<List<dynamic>> {
3744
/// margins between image previews
3845
final EdgeInsetsGeometry? previewMargin;
3946

47+
/// May be supplied for a fully custom display of the image preview
48+
final PreviewBuilder? previewBuilder;
49+
4050
/// placeholder image displayed when picking a new image
4151
final ImageProvider? placeholderImage;
4252

@@ -132,6 +142,7 @@ class FormBuilderImagePicker extends FormBuilderFieldDecoration<List<dynamic>> {
132142
this.showDecoration = true,
133143
this.placeholderWidget,
134144
this.previewAutoSizeWidth = true,
145+
this.previewBuilder,
135146
this.fit = BoxFit.cover,
136147
this.preventPop = false,
137148
this.displayCustomType,
@@ -307,6 +318,20 @@ class FormBuilderImagePicker extends FormBuilderFieldDecoration<List<dynamic>> {
307318
);
308319
}
309320

321+
if (previewBuilder != null) {
322+
return Builder(builder: (context) {
323+
final widgets = value
324+
.mapIndexed((i, v) => itemBuilder(context, v, i))
325+
.toList();
326+
327+
return previewBuilder(
328+
context,
329+
widgets,
330+
canUpload ? addButtonBuilder(context) : null,
331+
);
332+
});
333+
}
334+
310335
final child = SizedBox(
311336
height: previewHeight,
312337
child: itemCount == 0

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ packages:
2626
source: hosted
2727
version: "1.1.1"
2828
collection:
29-
dependency: transitive
29+
dependency: "direct main"
3030
description:
3131
name: collection
3232
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ dependencies:
1616
sdk: flutter
1717
flutter_form_builder: ^9.1.1
1818
async: ^2.11.0
19+
collection: ^1.17.0
1920
image_picker: ^1.0.4
2021

2122
dev_dependencies:

0 commit comments

Comments
 (0)