From c4d68d1929468bc4052a47c945c42c1e4188418e Mon Sep 17 00:00:00 2001 From: Andrey J Date: Sun, 26 Mar 2023 05:03:37 +0300 Subject: [PATCH] Issue #152. Added parameters to customize error messages --- example/lib/main.dart | 4 +++ .../multi_select_bottom_sheet_field.dart | 28 +++++++++++++++---- lib/chip_field/multi_select_chip_field.dart | 28 +++++++++++++++---- lib/dialog/multi_select_dialog_field.dart | 28 +++++++++++++++---- 4 files changed, 73 insertions(+), 15 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 104cb60..7a0c0b0 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -206,6 +206,10 @@ class _MyHomePageState extends State { _multiSelectKey.currentState.validate(); }, ), + errorTextStyle: TextStyle( + fontSize: 20, + color: Colors.lightGreen, + ), ), SizedBox(height: 40), //################################################################################################ diff --git a/lib/bottom_sheet/multi_select_bottom_sheet_field.dart b/lib/bottom_sheet/multi_select_bottom_sheet_field.dart index ff11320..10647af 100644 --- a/lib/bottom_sheet/multi_select_bottom_sheet_field.dart +++ b/lib/bottom_sheet/multi_select_bottom_sheet_field.dart @@ -106,6 +106,12 @@ class MultiSelectBottomSheetField extends FormField> { /// Whether the user can dismiss the widget by tapping outside final bool isDismissible; + /// Replaces the default padding for error message + final EdgeInsetsGeometry? errorPadding; + + /// Style the error message + final TextStyle? errorTextStyle; + final AutovalidateMode autovalidateMode; final FormFieldValidator>? validator; final FormFieldSetter>? onSaved; @@ -149,6 +155,8 @@ class MultiSelectBottomSheetField extends FormField> { this.onSaved, this.validator, this.autovalidateMode = AutovalidateMode.disabled, + this.errorPadding, + this.errorTextStyle, }) : super( key: key, onSaved: onSaved, @@ -190,6 +198,8 @@ class MultiSelectBottomSheetField extends FormField> { shape: shape, checkColor: checkColor, isDismissible: isDismissible, + errorPadding: errorPadding, + errorTextStyle: errorTextStyle, ); return _MultiSelectBottomSheetFieldView._withState( view as _MultiSelectBottomSheetFieldView, state); @@ -230,6 +240,8 @@ class _MultiSelectBottomSheetFieldView extends StatefulWidget { final bool separateSelectedItems; final Color? checkColor; final bool isDismissible; + final EdgeInsetsGeometry? errorPadding; + final TextStyle? errorTextStyle; FormFieldState>? state; _MultiSelectBottomSheetFieldView({ @@ -264,6 +276,8 @@ class _MultiSelectBottomSheetFieldView extends StatefulWidget { this.selectedItemsTextStyle, required this.separateSelectedItems, this.checkColor, + this.errorPadding, + this.errorTextStyle, required this.isDismissible, }); @@ -302,6 +316,8 @@ class _MultiSelectBottomSheetFieldView extends StatefulWidget { separateSelectedItems = field.separateSelectedItems, checkColor = field.checkColor, isDismissible = field.isDismissible, + errorPadding = field.errorPadding, + errorTextStyle = field.errorTextStyle, state = state; @override @@ -490,13 +506,15 @@ class __MultiSelectBottomSheetFieldViewState ? Row( children: [ Padding( - padding: const EdgeInsets.only(left: 4), + padding: + widget.errorPadding ?? const EdgeInsets.only(left: 4), child: Text( widget.state!.errorText!, - style: TextStyle( - color: Colors.red[800], - fontSize: 12.5, - ), + style: widget.errorTextStyle ?? + TextStyle( + color: Colors.red[800], + fontSize: 12.5, + ), ), ), ], diff --git a/lib/chip_field/multi_select_chip_field.dart b/lib/chip_field/multi_select_chip_field.dart index 35865b5..dc90970 100644 --- a/lib/chip_field/multi_select_chip_field.dart +++ b/lib/chip_field/multi_select_chip_field.dart @@ -78,6 +78,12 @@ class MultiSelectChipField extends FormField> { /// Set the width of the chip. final double? chipWidth; + /// Replaces the default padding for error message + final EdgeInsetsGeometry? errorPadding; + + /// Style the error message + final TextStyle? errorTextStyle; + final List initialValue; final AutovalidateMode autovalidateMode; final FormFieldValidator>? validator; @@ -115,6 +121,8 @@ class MultiSelectChipField extends FormField> { this.scrollBar, this.showHeader = true, this.chipWidth, + this.errorPadding, + this.errorTextStyle, }) : super( key: key, onSaved: onSaved, @@ -149,6 +157,8 @@ class MultiSelectChipField extends FormField> { scrollBar: scrollBar, showHeader: showHeader, chipWidth: chipWidth, + errorPadding: errorPadding, + errorTextStyle: errorTextStyle, ); return _MultiSelectChipFieldView.withState( view as _MultiSelectChipFieldView, state); @@ -187,6 +197,8 @@ class _MultiSelectChipFieldView extends StatefulWidget final HorizontalScrollBar? scrollBar; final bool showHeader; final double? chipWidth; + final EdgeInsetsGeometry? errorPadding; + final TextStyle? errorTextStyle; _MultiSelectChipFieldView({ required this.items, @@ -216,6 +228,8 @@ class _MultiSelectChipFieldView extends StatefulWidget this.scrollBar, this.showHeader = true, this.chipWidth, + this.errorPadding, + this.errorTextStyle, }); /// This constructor allows a FormFieldState to be passed in. Called by MultiSelectChipField. @@ -248,6 +262,8 @@ class _MultiSelectChipFieldView extends StatefulWidget scrollBar = field.scrollBar, showHeader = field.showHeader, chipWidth = field.chipWidth, + errorPadding = field.errorPadding, + errorTextStyle = field.errorTextStyle, state = state; @override @@ -448,13 +464,15 @@ class __MultiSelectChipFieldViewState ? Row( children: [ Padding( - padding: const EdgeInsets.fromLTRB(4, 4, 0, 0), + padding: widget.errorPadding ?? + const EdgeInsets.fromLTRB(4, 4, 0, 0), child: Text( widget.state!.errorText!, - style: TextStyle( - color: Colors.red[800], - fontSize: 12.5, - ), + style: widget.errorTextStyle ?? + TextStyle( + color: Colors.red[800], + fontSize: 12.5, + ), ), ), ], diff --git a/lib/dialog/multi_select_dialog_field.dart b/lib/dialog/multi_select_dialog_field.dart index b229a4d..6d98983 100644 --- a/lib/dialog/multi_select_dialog_field.dart +++ b/lib/dialog/multi_select_dialog_field.dart @@ -100,6 +100,12 @@ class MultiSelectDialogField extends FormField> { /// Whether the user can dismiss the widget by tapping outside final bool isDismissible; + /// Replaces the default padding for error message + final EdgeInsetsGeometry? errorPadding; + + /// Style the error message + final TextStyle? errorTextStyle; + final AutovalidateMode autovalidateMode; final FormFieldValidator>? validator; final FormFieldSetter>? onSaved; @@ -140,6 +146,8 @@ class MultiSelectDialogField extends FormField> { this.validator, this.initialValue = const [], this.autovalidateMode = AutovalidateMode.disabled, + this.errorPadding, + this.errorTextStyle, this.key, }) : super( key: key, @@ -180,6 +188,8 @@ class MultiSelectDialogField extends FormField> { separateSelectedItems: separateSelectedItems, checkColor: checkColor, isDismissible: isDismissible, + errorPadding: errorPadding, + errorTextStyle: errorTextStyle, ); return _MultiSelectDialogFieldView._withState(field, state); }); @@ -217,6 +227,8 @@ class _MultiSelectDialogFieldView extends StatefulWidget { final bool separateSelectedItems; final Color? checkColor; final bool isDismissible; + final EdgeInsetsGeometry? errorPadding; + final TextStyle? errorTextStyle; FormFieldState>? state; _MultiSelectDialogFieldView({ @@ -249,6 +261,8 @@ class _MultiSelectDialogFieldView extends StatefulWidget { this.selectedItemsTextStyle, this.separateSelectedItems = false, this.checkColor, + this.errorPadding, + this.errorTextStyle, required this.isDismissible, }); @@ -285,6 +299,8 @@ class _MultiSelectDialogFieldView extends StatefulWidget { separateSelectedItems = field.separateSelectedItems, checkColor = field.checkColor, isDismissible = field.isDismissible, + errorPadding = field.errorPadding, + errorTextStyle = field.errorTextStyle, state = state; @override @@ -467,13 +483,15 @@ class __MultiSelectDialogFieldViewState ? Row( children: [ Padding( - padding: const EdgeInsets.only(left: 4), + padding: + widget.errorPadding ?? const EdgeInsets.only(left: 4), child: Text( widget.state!.errorText!, - style: TextStyle( - color: Colors.red[800], - fontSize: 12.5, - ), + style: widget.errorTextStyle ?? + TextStyle( + color: Colors.red[800], + fontSize: 12.5, + ), ), ), ],