diff --git a/docs/components/dialog/BrnSingleSelectDialog/BrnSingleSelectDialog.md b/docs/components/dialog/BrnSingleSelectDialog/BrnSingleSelectDialog.md index b6d46bd4..f5212325 100644 --- a/docs/components/dialog/BrnSingleSelectDialog/BrnSingleSelectDialog.md +++ b/docs/components/dialog/BrnSingleSelectDialog/BrnSingleSelectDialog.md @@ -27,6 +27,8 @@ group: const BrnSingleSelectDialog( {this.isClose: true, this.title: "", + this.messageText, + this.messageWidget, required this.conditions, this.submitText: "提交", this.submitBgColor, @@ -44,6 +46,8 @@ const BrnSingleSelectDialog( | ------------------------ | ----------------------------------- | --------------------------------------------------------- | ------------ | ---------- | | isClose | bool | 用于控制弹窗是否相应电机外部关闭,true 关闭,false 不关闭 | 否 | true | | title | String | 弹窗标题名称 | 否 | "" | +| messageText | String? | 描述文案,优先级较 messageWidget 低,优先使用 messageWidget | 否 | | +| messageWidget | Widget? | 描述 Widget | 否 | | | conditions | List | 备选项数组 | 否 | | | checkedItem | String | 选中的选项名称 | 否 | | | submitText | String | 确定/提交 按钮文案 | 否 | | @@ -60,6 +64,7 @@ const BrnSingleSelectDialog( + ```dart String hintText = "感兴趣待跟进"; int selectedIndex = 0; @@ -75,51 +80,53 @@ String hintText = "感兴趣待跟进"; "vzxczxc" ]; showDialog( - context: context, - builder: (_) => StatefulBuilder( - builder: (context, state) { - return BrnSingleSelectDialog( - isClose: true, - title: '请选择无效客源原因', - conditions: conditions, - checkedItem: conditions[selectedIndex], - submitText: '提交', - isCustomFollowScroll: true, - customWidget: TextField( - //光标颜色 - maxLines: 2, - cursorColor: Color(0xFF0984F9), - //光标圆角弧度 - cursorRadius: Radius.circular(2.0), - style: TextStyle(fontSize: 14, color: Color(0xFF222222)), - maxLengthEnforcement: MaxLengthEnforcement.enforced, - onChanged: (value) {}, - decoration: InputDecoration( - contentPadding: EdgeInsets.all(8.0), - hintText: hintText, - hintStyle: TextStyle(fontSize: 14, color: Color(0xFFCCCCCC)), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(2.0), - borderSide: BorderSide( - width: 0.5, - color: Color(0xFFCCCCCC), - )), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.circular(2.0), - borderSide: BorderSide( - width: 0.5, - color: Color(0xFFCCCCCC), - )), - ), - ), - onItemClick: (BuildContext context, int index) { - hintText = conditions[index]; - selectedIndex = index; - state(() {}); - }, - onSubmitClick: (data) { - BrnToast.show(data, context); - }); - }, - )); + context: context, + builder: (_) => StatefulBuilder( + builder: (context, state) { + return BrnSingleSelectDialog( + isClose: true, + title: '请选择无效客源原因', + messageText: '请您评价该条线索请您评价该条线索请您评价该条线索请您评价该条线索请您评价该条线索', + conditions: conditions, + checkedItem: conditions[selectedIndex], + submitText: '提交', + isCustomFollowScroll: true, + customWidget: TextField( + //光标颜色 + maxLines: 2, + cursorColor: Color(0xFF0984F9), + //光标圆角弧度 + cursorRadius: Radius.circular(2.0), + style: TextStyle(fontSize: 14, color: Color(0xFF222222)), + maxLengthEnforcement: MaxLengthEnforcement.enforced, + onChanged: (value) {}, + decoration: InputDecoration( + contentPadding: EdgeInsets.all(8.0), + hintText: hintText, + hintStyle: + TextStyle(fontSize: 14, color: Color(0xFFCCCCCC)), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(2.0), + borderSide: BorderSide( + width: 0.5, + color: Color(0xFFCCCCCC), + )), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(2.0), + borderSide: BorderSide( + width: 0.5, + color: Color(0xFFCCCCCC), + )), + ), + ), + onItemClick: (BuildContext context, int index) { + hintText = conditions[index]; + selectedIndex = index; + state(() {}); + }, + onSubmitClick: (data) { + BrnToast.show(data!, context); + }); + }, + )); ``` diff --git a/docs/components/dialog/BrnSingleSelectDialog/img/BrnSingleSelectDialog.png b/docs/components/dialog/BrnSingleSelectDialog/img/BrnSingleSelectDialog.png index a727361c..2fa2c4ae 100644 Binary files a/docs/components/dialog/BrnSingleSelectDialog/img/BrnSingleSelectDialog.png and b/docs/components/dialog/BrnSingleSelectDialog/img/BrnSingleSelectDialog.png differ diff --git a/example/lib/sample/components/dialog/dialog_entry_page.dart b/example/lib/sample/components/dialog/dialog_entry_page.dart index 864a71d4..a4be831e 100644 --- a/example/lib/sample/components/dialog/dialog_entry_page.dart +++ b/example/lib/sample/components/dialog/dialog_entry_page.dart @@ -290,6 +290,7 @@ class DialogEntryPage extends StatelessWidget { return BrnSingleSelectDialog( isClose: true, title: '请选择无效客源原因', + messageText: '请您评价该条线索请您评价该条线索请您评价该条线索请您评价该条线索请您评价该条线索', conditions: conditions, checkedItem: conditions[selectedIndex], submitText: '提交', diff --git a/lib/src/components/dialog/brn_multi_select_dialog.dart b/lib/src/components/dialog/brn_multi_select_dialog.dart index d85ebe5c..40e979e8 100644 --- a/lib/src/components/dialog/brn_multi_select_dialog.dart +++ b/lib/src/components/dialog/brn_multi_select_dialog.dart @@ -244,11 +244,9 @@ class MultiSelectPickerWidgetState extends State { if (!BrunoTools.isEmpty(widget.messageText)) { return Padding( padding: EdgeInsets.only(bottom: 8, left: 20, right: 20), - child: Center( - child: Text( - widget.messageText!, - style: cContentTextStyle, - ), + child: Text( + widget.messageText!, + style: cContentTextStyle, ), ); } diff --git a/lib/src/components/dialog/brn_single_select.dart b/lib/src/components/dialog/brn_single_select.dart index 96d5726b..1f3554e5 100644 --- a/lib/src/components/dialog/brn_single_select.dart +++ b/lib/src/components/dialog/brn_single_select.dart @@ -6,6 +6,8 @@ import 'package:bruno/src/theme/configs/brn_dialog_config.dart'; import 'package:bruno/src/utils/brn_tools.dart'; import 'package:flutter/material.dart'; +import 'brn_dialog.dart'; + typedef BrnSingleSelectOnSubmitCallback = Function(String? data); typedef BrnSingleSelectOnItemClickCallback = void Function( BuildContext dialogContext, int index); @@ -18,6 +20,12 @@ class BrnSingleSelectDialog extends Dialog { /// 弹窗标题 final String title; + /// 描述文案,优先级较 messageWidget 低,优先使用 messageWidget + final String? messageText; + + /// 描述widget + final Widget? messageWidget; + /// 时间区间最大值 final List conditions; @@ -48,6 +56,8 @@ class BrnSingleSelectDialog extends Dialog { const BrnSingleSelectDialog( {this.isClose: true, this.title: "", + this.messageText, + this.messageWidget, required this.conditions, this.submitText: "提交", this.submitBgColor, @@ -63,6 +73,8 @@ class BrnSingleSelectDialog extends Dialog { return BrnSingleSelectDialogWidget( isClose: isClose, title: title, + messageText: messageText, + messageWidget: messageWidget, conditions: conditions, submitText: submitText, onSubmitClick: onSubmitClick, @@ -79,6 +91,8 @@ class BrnSingleSelectDialog extends Dialog { class BrnSingleSelectDialogWidget extends StatefulWidget { final bool isClose; final String title; + final String? messageText; + final Widget? messageWidget; final List? conditions; final String submitText; final BrnSingleSelectOnSubmitCallback? onSubmitClick; @@ -97,6 +111,8 @@ class BrnSingleSelectDialogWidget extends StatefulWidget { BrnSingleSelectDialogWidget( {this.isClose = true, this.title = "", + this.messageText, + this.messageWidget, this.conditions, this.submitText = "", this.submitBgColor, @@ -151,6 +167,7 @@ class BrnSingleSelectDialogWidgetState widget.themeData!), ), ), + _generateContentWidget(), Container( constraints: BoxConstraints(maxHeight: 300), child: widget.isCustomFollowScroll @@ -250,6 +267,29 @@ class BrnSingleSelectDialogWidgetState ))); } + /// 内容widget 以 messageWidget 为准, + /// 若无则以 messageText 生成widget 填充, + /// 都没设置则为空 Container + Widget _generateContentWidget() { + if (widget.messageWidget != null) + return Padding( + padding: EdgeInsets.only(bottom: 8, left: 20, right: 20), + child: widget.messageWidget, + ); + + if (!BrunoTools.isEmpty(widget.messageText)) { + return Padding( + padding: EdgeInsets.only(bottom: 8, left: 20, right: 20), + child: Text( + widget.messageText!, + style: cContentTextStyle, + ), + ); + } + return Container(); + } + + Widget _buildItem(BuildContext context, int index) { if (widget.conditions == null) { return Container();