From 8c923c757e215e383915403ef2016f25ee6dac6a Mon Sep 17 00:00:00 2001 From: Guilain F Date: Mon, 27 Oct 2025 16:15:13 +0100 Subject: [PATCH] feat: previewBuilder keep InputDecorator if showDecoration is true --- lib/src/form_builder_image_picker.dart | 105 ++++++++++++++----------- 1 file changed, 58 insertions(+), 47 deletions(-) diff --git a/lib/src/form_builder_image_picker.dart b/lib/src/form_builder_image_picker.dart index f7e48d3..416dce4 100644 --- a/lib/src/form_builder_image_picker.dart +++ b/lib/src/form_builder_image_picker.dart @@ -38,7 +38,11 @@ class FormBuilderImagePicker extends FormBuilderFieldDecoration> { final EdgeInsetsGeometry? previewMargin; /// May be supplied for a fully custom display of the image preview - final Widget Function(BuildContext, List children, Widget? addButton)? + final Widget Function( + BuildContext context, + List children, + Widget? addButton, + )? previewBuilder; /// placeholder image displayed when picking a new image @@ -313,54 +317,60 @@ class FormBuilderImagePicker extends FormBuilderFieldDecoration> { ); } - if (previewBuilder != null) { - return Builder( - builder: (context) { - final widgets = value - .mapIndexed((i, v) => itemBuilder(context, v, i)) - .toList(); - - return previewBuilder( - context, - widgets, - canUpload ? addButtonBuilder(context) : null, - ); - }, - ); - } - - final child = SizedBox( - height: previewHeight, - child: itemCount == 0 - ? null //empty list - : itemCount == - 1 //has a single item, - ? canUpload - ? addButtonBuilder(state.context) //upload button - : SizedBox( - width: previewAutoSizeWidth ? null : previewWidth, - child: itemBuilder(state.context, value.first, 0), - ) - : ListView.builder( - itemExtent: previewAutoSizeWidth ? null : previewWidth, - scrollDirection: Axis.horizontal, - itemCount: itemCount, - itemBuilder: (context, index) { - return Container( - margin: previewMargin, - child: Builder( - builder: (context) { - if (index < value.length) { - final item = value[index]; - return itemBuilder(context, item, index); - } - return addButtonBuilder(context); + final child = previewBuilder != null + ? Builder( + builder: (context) { + final widgets = value + .mapIndexed((i, v) => itemBuilder(context, v, i)) + .toList(); + + return previewBuilder( + context, + widgets, + canUpload ? addButtonBuilder(context) : null, + ); + }, + ) + : SizedBox( + height: previewHeight, + child: itemCount == 0 + ? null //empty list + : itemCount == + 1 //has a single item, + ? canUpload + ? addButtonBuilder(state.context) //upload button + : SizedBox( + width: previewAutoSizeWidth + ? null + : previewWidth, + child: itemBuilder( + state.context, + value.first, + 0, + ), + ) + : ListView.builder( + itemExtent: previewAutoSizeWidth + ? null + : previewWidth, + scrollDirection: Axis.horizontal, + itemCount: itemCount, + itemBuilder: (context, index) { + return Container( + margin: previewMargin, + child: Builder( + builder: (context) { + if (index < value.length) { + final item = value[index]; + return itemBuilder(context, item, index); + } + return addButtonBuilder(context); + }, + ), + ); }, ), - ); - }, - ), - ); + ); return showDecoration ? InputDecorator(decoration: state.decoration, child: child) : child; @@ -390,6 +400,7 @@ class XFileImage extends StatefulWidget { this.fit, this.loadingWidget, }); + final XFile file; final BoxFit? fit; final WidgetBuilder? loadingWidget;