From 4e3c3b19aa4fb486dbd8bf200864124b09fb85d8 Mon Sep 17 00:00:00 2001 From: Sayed Hashim Date: Wed, 6 Dec 2023 12:50:51 +0530 Subject: [PATCH 1/3] disable onTap when enabled is set to false --- lib/dialog/multi_select_dialog_field.dart | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/dialog/multi_select_dialog_field.dart b/lib/dialog/multi_select_dialog_field.dart index b229a4d..d0134df 100644 --- a/lib/dialog/multi_select_dialog_field.dart +++ b/lib/dialog/multi_select_dialog_field.dart @@ -100,6 +100,9 @@ class MultiSelectDialogField extends FormField> { /// Whether the user can dismiss the widget by tapping outside final bool isDismissible; + /// Whether onTap is enabled + final bool enabled; + final AutovalidateMode autovalidateMode; final FormFieldValidator>? validator; final FormFieldSetter>? onSaved; @@ -136,6 +139,7 @@ class MultiSelectDialogField extends FormField> { this.separateSelectedItems = false, this.checkColor, this.isDismissible = true, + this.enabled = true, this.onSaved, this.validator, this.initialValue = const [], @@ -180,6 +184,7 @@ class MultiSelectDialogField extends FormField> { separateSelectedItems: separateSelectedItems, checkColor: checkColor, isDismissible: isDismissible, + enabled: enabled, ); return _MultiSelectDialogFieldView._withState(field, state); }); @@ -217,6 +222,7 @@ class _MultiSelectDialogFieldView extends StatefulWidget { final bool separateSelectedItems; final Color? checkColor; final bool isDismissible; + final bool enabled; FormFieldState>? state; _MultiSelectDialogFieldView({ @@ -250,6 +256,7 @@ class _MultiSelectDialogFieldView extends StatefulWidget { this.separateSelectedItems = false, this.checkColor, required this.isDismissible, + required this.enabled, }); /// This constructor allows a FormFieldState to be passed in. Called by MultiSelectDialogField. @@ -285,6 +292,7 @@ class _MultiSelectDialogFieldView extends StatefulWidget { separateSelectedItems = field.separateSelectedItems, checkColor = field.checkColor, isDismissible = field.isDismissible, + enabled = field.enabled, state = state; @override @@ -422,9 +430,11 @@ class __MultiSelectDialogFieldViewState mainAxisAlignment: MainAxisAlignment.start, children: [ InkWell( - onTap: () { - _showDialog(context); - }, + onTap: !widget.enabled + ? null + : () { + _showDialog(context); + }, child: Container( decoration: widget.state != null ? widget.decoration ?? From aeb1c6bf4f3239924740d70e76f69a691061fd65 Mon Sep 17 00:00:00 2001 From: Sayed Hashim Date: Wed, 6 Dec 2023 13:03:31 +0530 Subject: [PATCH 2/3] add parameter to style the field when disabled --- lib/dialog/multi_select_dialog_field.dart | 60 ++++++++++++++--------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/lib/dialog/multi_select_dialog_field.dart b/lib/dialog/multi_select_dialog_field.dart index d0134df..115c104 100644 --- a/lib/dialog/multi_select_dialog_field.dart +++ b/lib/dialog/multi_select_dialog_field.dart @@ -100,9 +100,12 @@ class MultiSelectDialogField extends FormField> { /// Whether the user can dismiss the widget by tapping outside final bool isDismissible; - /// Whether onTap is enabled + /// Whether the field is enabled final bool enabled; + /// Style the Container when the field is disabled + final BoxDecoration? disabledDecoration; + final AutovalidateMode autovalidateMode; final FormFieldValidator>? validator; final FormFieldSetter>? onSaved; @@ -140,6 +143,7 @@ class MultiSelectDialogField extends FormField> { this.checkColor, this.isDismissible = true, this.enabled = true, + this.disabledDecoration, this.onSaved, this.validator, this.initialValue = const [], @@ -185,6 +189,7 @@ class MultiSelectDialogField extends FormField> { checkColor: checkColor, isDismissible: isDismissible, enabled: enabled, + disabledDecoration: disabledDecoration, ); return _MultiSelectDialogFieldView._withState(field, state); }); @@ -223,6 +228,7 @@ class _MultiSelectDialogFieldView extends StatefulWidget { final Color? checkColor; final bool isDismissible; final bool enabled; + final BoxDecoration? disabledDecoration; FormFieldState>? state; _MultiSelectDialogFieldView({ @@ -257,6 +263,7 @@ class _MultiSelectDialogFieldView extends StatefulWidget { this.checkColor, required this.isDismissible, required this.enabled, + this.disabledDecoration, }); /// This constructor allows a FormFieldState to be passed in. Called by MultiSelectDialogField. @@ -293,6 +300,7 @@ class _MultiSelectDialogFieldView extends StatefulWidget { checkColor = field.checkColor, isDismissible = field.isDismissible, enabled = field.enabled, + disabledDecoration = field.disabledDecoration, state = state; @override @@ -436,29 +444,33 @@ class __MultiSelectDialogFieldViewState _showDialog(context); }, child: Container( - decoration: widget.state != null - ? widget.decoration ?? - BoxDecoration( - border: Border( - bottom: BorderSide( - color: widget.state != null && widget.state!.hasError - ? Colors.red.shade800.withOpacity(0.6) - : _selectedItems.isNotEmpty - ? (widget.selectedColor != null && - widget.selectedColor != - Colors.transparent) - ? widget.selectedColor! - : Theme.of(context).primaryColor - : Colors.black45, - width: _selectedItems.isNotEmpty - ? (widget.state != null && widget.state!.hasError) - ? 1.4 - : 1.8 - : 1.2, - ), - ), - ) - : widget.decoration, + decoration: !widget.enabled && widget.disabledDecoration != null + ? widget.disabledDecoration + : widget.state != null + ? widget.decoration ?? + BoxDecoration( + border: Border( + bottom: BorderSide( + color: + widget.state != null && widget.state!.hasError + ? Colors.red.shade800.withOpacity(0.6) + : _selectedItems.isNotEmpty + ? (widget.selectedColor != null && + widget.selectedColor != + Colors.transparent) + ? widget.selectedColor! + : Theme.of(context).primaryColor + : Colors.black45, + width: _selectedItems.isNotEmpty + ? (widget.state != null && + widget.state!.hasError) + ? 1.4 + : 1.8 + : 1.2, + ), + ), + ) + : widget.decoration, padding: const EdgeInsets.all(10), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, From e27a6f8e9666c18e04ccf18e6770c4faa1cffcce Mon Sep 17 00:00:00 2001 From: hashimsayed0 Date: Mon, 25 Nov 2024 07:56:42 +0000 Subject: [PATCH 3/3] accept any Widget for buttonText in MultiSelectDialogField --- lib/dialog/multi_select_dialog_field.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/dialog/multi_select_dialog_field.dart b/lib/dialog/multi_select_dialog_field.dart index 115c104..9a40423 100644 --- a/lib/dialog/multi_select_dialog_field.dart +++ b/lib/dialog/multi_select_dialog_field.dart @@ -15,7 +15,7 @@ class MultiSelectDialogField extends FormField> { final BoxDecoration? decoration; /// Set text that is displayed on the button. - final Text? buttonText; + final Widget? buttonText; /// Specify the button icon. final Icon? buttonIcon; @@ -199,7 +199,7 @@ class MultiSelectDialogField extends FormField> { class _MultiSelectDialogFieldView extends StatefulWidget { final MultiSelectListType? listType; final BoxDecoration? decoration; - final Text? buttonText; + final Widget? buttonText; final Icon? buttonIcon; final Widget? title; final List> items; @@ -504,4 +504,4 @@ class __MultiSelectDialogFieldViewState ], ); } -} +} \ No newline at end of file