Commit 310333f8797f3f37bbdf5bd3164bd5fb84dd4999

Authored by wdn127929
1 parent 0744959e

订单变更约束,根据配置项

@@ -104,6 +104,9 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> { @@ -104,6 +104,9 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> {
104 StoreBaseIndoProvider storeBaseIndoProvider; 104 StoreBaseIndoProvider storeBaseIndoProvider;
105 String ddateSoltSelect = ''; //切换时间之前的餐段 105 String ddateSoltSelect = ''; //切换时间之前的餐段
106 String dateShowNow = ""; //今天,明天,后天 106 String dateShowNow = ""; //今天,明天,后天
  107 +
  108 + bool isSetOver = true;
  109 + bool isReserveOver = true;
107 @override 110 @override
108 void initState() { 111 void initState() {
109 super.initState(); 112 super.initState();
@@ -171,6 +174,16 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> { @@ -171,6 +174,16 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> {
171 flex: 1, 174 flex: 1,
172 child: InkWell( 175 child: InkWell(
173 onTap: () { 176 onTap: () {
  177 + String createtime = detailEntity.ddate.toString() + '000';
  178 + DateTime reservedate =
  179 + DateTime.fromMillisecondsSinceEpoch(int.parse(createtime));
  180 + if (!_getRealIsReserveOver(reservedate)) {
  181 + if (_getIsBefore(element.ddateSolt)) {
  182 + Utils.showToast('不允许变更订单到过去餐段');
  183 + return;
  184 + }
  185 + }
  186 +
174 currTimeIndex = int.parse(element.ddateSolt); 187 currTimeIndex = int.parse(element.ddateSolt);
175 setState(() {}); 188 setState(() {});
176 189
@@ -361,6 +374,16 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> { @@ -361,6 +374,16 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> {
361 getDzSellerConf() async { 374 getDzSellerConf() async {
362 await marketingCenterProvider.getDzSellerConf(context, 375 await marketingCenterProvider.getDzSellerConf(context,
363 showLoading: false, selfDismiss: true); 376 showLoading: false, selfDismiss: true);
  377 +
  378 + if (marketingCenterProvider.dzSellerConfModel != null) {
  379 + isSetOver = marketingCenterProvider.dzSellerConfModel.isSetOver == '1'
  380 + ? true
  381 + : false;
  382 + isReserveOver =
  383 + marketingCenterProvider.dzSellerConfModel.isReserveOver == '1'
  384 + ? true
  385 + : false;
  386 + }
364 } 387 }
365 388
366 _initData() async { 389 _initData() async {
@@ -720,6 +743,139 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> { @@ -720,6 +743,139 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> {
720 return lists; 743 return lists;
721 } 744 }
722 745
  746 + // _getRealIsReserveOver() {
  747 + // //判断时间是否可变更
  748 + // bool reserveOrder = true; //默认允许变更过去餐段订单的时间
  749 + // //如果不允许变更订单到过去餐段,则开始判断
  750 + // //两个条件同时成立: 1.订单的时间是未来 2. 将要改变的时间是过去
  751 + // if (!isReserveOver) {
  752 + // String times;
  753 + // //找到当前餐段对应的时间段
  754 + // storeBaseIndoProvider.dayDateData.forEach((element) {
  755 + // if (element.ddateSolt == detailEntity.ddate_solt) {
  756 + // times = element.mdate;
  757 + // }
  758 + // });
  759 + // //组装时间戳
  760 + // List<String> datas = times.split('-');
  761 + // // DateTime selectStime = DateTime.parse('${dateTimeSelect.year}' +
  762 + // // '-' +
  763 + // // '${dateTimeSelect.month}' +
  764 + // // '-' +
  765 + // // '${dateTimeSelect.day}' +
  766 + // // ' ${datas[0]}:00'); //选中餐段开始时间戳
  767 + // DateTime selectEtime = DateTime.parse('${dateTime.year}' +
  768 + // '-' +
  769 + // '${dateTime.month}' +
  770 + // '-' +
  771 + // '${dateTime.day}' +
  772 + // ' ${datas[1]}:00'); //选中餐段结束时间戳
  773 + // // 过去的餐段界定
  774 + // if (selectEtime.isBefore(DateTime.now())) {
  775 + // // 属于过去餐段
  776 + // reserveOrder = true;
  777 + // } else {
  778 + // // 属于未来餐段
  779 + // reserveOrder = false;
  780 + // }
  781 + // }
  782 +
  783 + // return reserveOrder;
  784 + // }
  785 +
  786 + _getRealIsReserveOver(DateTime time) {
  787 + //判断时间是否可变更
  788 +
  789 + bool reserveOrder = true; //默认允许变更过去餐段订单的时间
  790 + //如果不允许变更订单到过去餐段,则开始判断
  791 + //两个条件同时成立: 1.订单的时间是未来 2. 将要改变的时间是过去
  792 + if (!isReserveOver) {
  793 + String times;
  794 + //找到当前餐段对应的时间段
  795 + storeBaseIndoProvider.dayDateData.forEach((element) {
  796 + if (element.ddateSolt == detailEntity.ddate_solt) {
  797 + times = element.mdate;
  798 + }
  799 + });
  800 + //组装时间戳
  801 + List<String> datas = times.split('-');
  802 + // DateTime selectStime = DateTime.parse('${dateTimeSelect.year}' +
  803 + // '-' +
  804 + // '${dateTimeSelect.month}' +
  805 + // '-' +
  806 + // '${dateTimeSelect.day}' +
  807 + // ' ${datas[0]}:00'); //选中餐段开始时间戳
  808 + DateTime selectEtime = DateTime.parse('${time.year}' +
  809 + '-' +
  810 + '${time.month}' +
  811 + '-' +
  812 + '${time.day}' +
  813 + ' ${datas[1]}:00'); //选中餐段结束时间戳
  814 + // 过去的餐段界定
  815 + if (selectEtime.isBefore(DateTime.now())) {
  816 + // 属于过去餐段
  817 + reserveOrder = true;
  818 + } else {
  819 + // 属于未来餐段
  820 + reserveOrder = false;
  821 + }
  822 + }
  823 +
  824 + return reserveOrder;
  825 + }
  826 +
  827 + _getIsBefore(String ddateSoltTemp) {
  828 + //判断2. 将要改变的时间是过去
  829 +
  830 + String createtime = detailEntity.ddate.toString() + '000';
  831 + DateTime reservedate =
  832 + DateTime.fromMillisecondsSinceEpoch(int.parse(createtime));
  833 +
  834 + String timesreserve;
  835 + //找到当前餐段对应的时间段
  836 + storeBaseIndoProvider.dayDateData.forEach((element) {
  837 + if (element.ddateSolt == detailEntity.ddate_solt) {
  838 + timesreserve = element.mdate;
  839 + }
  840 + });
  841 + //组装时间戳
  842 + List<String> datasreserve = timesreserve.split('-');
  843 +
  844 + DateTime reserveStime = DateTime.parse('${reservedate.year}' +
  845 + '-' +
  846 + '${reservedate.month}' +
  847 + '-' +
  848 + '${reservedate.day}' +
  849 + ' ${datasreserve[0]}:00'); //订单餐段开始时间戳
  850 +
  851 + String timesnow;
  852 + //找到当前餐段对应的时间段
  853 + //找到当前餐段对应的时间段
  854 + storeBaseIndoProvider.dayDateData.forEach((element) {
  855 + if (element.ddateSolt == ddateSoltTemp) {
  856 + timesnow = element.mdate;
  857 + }
  858 + });
  859 + //组装时间戳
  860 + List<String> datanow = timesnow.split('-');
  861 +
  862 + //将要选中的餐段和时间
  863 + DateTime nowStime = DateTime.parse('${dateTime.year}' +
  864 + '-' +
  865 + '${dateTime.month}' +
  866 + '-' +
  867 + '${dateTime.day}' +
  868 + ' ${datanow[1]}:00'); //选中餐段开始时间戳
  869 +
  870 + if (nowStime.isBefore(reserveStime)) {
  871 + // 变更到过去餐段
  872 + return true;
  873 + } else {
  874 + // 变更到未来餐段
  875 + return false;
  876 + }
  877 + }
  878 +
723 @override 879 @override
724 Widget build(BuildContext context) { 880 Widget build(BuildContext context) {
725 storeBaseIndoProvider = 881 storeBaseIndoProvider =
@@ -947,12 +1103,89 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> { @@ -947,12 +1103,89 @@ class _NoteBookChangeFPageOnlyState extends State<NoteBookChangeFPageOnly> {
947 horizontal: ScreenUtil().setWidth(15)), 1103 horizontal: ScreenUtil().setWidth(15)),
948 child: GestureDetector( 1104 child: GestureDetector(
949 onTap: () { 1105 onTap: () {
  1106 + //判断时间是否可变更
  1107 +
  1108 + bool setOrder = true; //默认允许变更过去餐段订单的时间
  1109 + //如果不允许变更过去餐段订单的时间,则开始判断
  1110 + //连个条件同时成立: 1.订单的时间是过去 2. 时间改变
  1111 + if (!isSetOver) {
  1112 + String times;
  1113 + //找到当前餐段对应的时间段
  1114 + if (currTimeIndex == 1) {
  1115 + times = morning;
  1116 + } else if (currTimeIndex == 2) {
  1117 + times = noon;
  1118 + } else if (currTimeIndex == 3) {
  1119 + times = night;
  1120 + }
  1121 + //else if (currTimeIndex == 4) {
  1122 + // times = meal1;
  1123 + // } else if (currTimeIndex == 5) {
  1124 + // times = meal2;
  1125 + // }
  1126 + //组装时间戳
  1127 + List<String> datas = times.split('-');
  1128 + // DateTime selectStime = DateTime.parse('${dateTimeSelect.year}' +
  1129 + // '-' +
  1130 + // '${dateTimeSelect.month}' +
  1131 + // '-' +
  1132 + // '${dateTimeSelect.day}' +
  1133 + // ' ${datas[0]}:00'); //选中餐段开始时间戳
  1134 + DateTime selectEtime = DateTime.parse(
  1135 + '${dateTime.year}' +
  1136 + '-' +
  1137 + '${dateTime.month}' +
  1138 + '-' +
  1139 + '${dateTime.day}' +
  1140 + ' ${datas[1]}:00'); //选中餐段结束时间戳
  1141 + // 过去的餐段界定
  1142 + if (selectEtime.isBefore(DateTime.now())) {
  1143 +// 属于过去餐段
  1144 + setOrder = false;
  1145 + } else {
  1146 + // 属于未来餐段
  1147 + setOrder = true;
  1148 + }
  1149 + }
  1150 +
  1151 + if (!setOrder) {
  1152 + Utils.showToast('不允许变更过去餐段订单的时间');
  1153 + return;
  1154 + }
  1155 +
950 // 切换之前的餐段 1156 // 切换之前的餐段
951 ddateSoltSelect = currTimeIndex.toString(); 1157 ddateSoltSelect = currTimeIndex.toString();
952 1158
953 DialogUtil.showCalendarDialog(context, dateTime) 1159 DialogUtil.showCalendarDialog(context, dateTime)
954 .then((day) async { 1160 .then((day) async {
955 if (day != null) { 1161 if (day != null) {
  1162 + //如果不允许变更订单到过去餐段
  1163 + String createtime =
  1164 + detailEntity.ddate.toString() + '000';
  1165 + DateTime reservedate =
  1166 + DateTime.fromMillisecondsSinceEpoch(
  1167 + int.parse(createtime));
  1168 + if (!_getRealIsReserveOver(reservedate)) {
  1169 + //属于未来时间的订单
  1170 + //将要变更的时间是不是过去
  1171 +
  1172 + if (DateTime.parse('${day.year}' +
  1173 + '-' +
  1174 + '${day.month}' +
  1175 + '-' +
  1176 + '${day.day}' +
  1177 + ' 00:00:00')
  1178 + .isBefore(DateTime.parse(
  1179 + '${reservedate.year}' +
  1180 + '-' +
  1181 + '${reservedate.month}' +
  1182 + '-' +
  1183 + '${reservedate.day}' +
  1184 + ' 00:00:00'))) {
  1185 + Utils.showToast('不允许变更订单到过去餐段');
  1186 + return;
  1187 + }
  1188 + }
956 createDateText(context, day); 1189 createDateText(context, day);
957 int dateTimeMill = 1190 int dateTimeMill =
958 day.millisecondsSinceEpoch; 1191 day.millisecondsSinceEpoch;
@@ -21,6 +21,7 @@ class TableItemOrReserve extends StatefulWidget { @@ -21,6 +21,7 @@ class TableItemOrReserve extends StatefulWidget {
21 final int height; //高度 21 final int height; //高度
22 final bool need; 22 final bool need;
23 final List<TableListReserve> selectTables; 23 final List<TableListReserve> selectTables;
  24 + final bool addOrder;
24 25
25 TableItemOrReserve(this.table, 26 TableItemOrReserve(this.table,
26 {this.onSelected, 27 {this.onSelected,
@@ -31,7 +32,8 @@ class TableItemOrReserve extends StatefulWidget { @@ -31,7 +32,8 @@ class TableItemOrReserve extends StatefulWidget {
31 32
32 // this.tableMap, 33 // this.tableMap,
33 this.need = true, 34 this.need = true,
34 - this.selectTables}); 35 + this.selectTables,
  36 + this.addOrder = true});
35 37
36 @override 38 @override
37 State<StatefulWidget> createState() { 39 State<StatefulWidget> createState() {
@@ -209,6 +211,10 @@ class TableItemOrReserveState extends State<TableItemOrReserve> { @@ -209,6 +211,10 @@ class TableItemOrReserveState extends State<TableItemOrReserve> {
209 if (islock && table.signStr != '已预订') { 211 if (islock && table.signStr != '已预订') {
210 return; 212 return;
211 } 213 }
  214 + if (widget.fromPage == 'table_manage' && widget.addOrder == false&& table.signStr != '已预订') {
  215 + Utils.showToast('不允许新建过去餐段的订单!');
  216 + return;
  217 + }
212 setState(() { 218 setState(() {
213 table.selected = !(table.selected ?? false); 219 table.selected = !(table.selected ?? false);
214 }); 220 });
@@ -124,6 +124,7 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -124,6 +124,7 @@ class TableManagerPageState extends State<TableManagerPage> {
124 String smsErro = ''; 124 String smsErro = '';
125 String showErro = ''; 125 String showErro = '';
126 String ddateSoltSelect = ''; 126 String ddateSoltSelect = '';
  127 + bool isAddOver = true;
127 // int 128 // int
128 129
129 ScrollController _scrollCrl = ScrollController(); 130 ScrollController _scrollCrl = ScrollController();
@@ -194,6 +195,7 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -194,6 +195,7 @@ class TableManagerPageState extends State<TableManagerPage> {
194 personNumList = Utils.getPersonNumList(); 195 personNumList = Utils.getPersonNumList();
195 196
196 WidgetsBinding.instance.addPostFrameCallback((_) { 197 WidgetsBinding.instance.addPostFrameCallback((_) {
  198 + getDzSellerConf();
197 getMealSectionByDay(); 199 getMealSectionByDay();
198 if (App.sp.containsKey('table_list')) { 200 if (App.sp.containsKey('table_list')) {
199 // //退出清空桌位数据 201 // //退出清空桌位数据
@@ -338,7 +340,8 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -338,7 +340,8 @@ class TableManagerPageState extends State<TableManagerPage> {
338 currTimeIndex = 5; 340 currTimeIndex = 5;
339 } else { 341 } else {
340 //过了晚市 342 //过了晚市
341 - currTimeIndex = int.parse(storeBaseIndoProvider.dayDateData.last.ddateSolt); 343 + currTimeIndex =
  344 + int.parse(storeBaseIndoProvider.dayDateData.last.ddateSolt);
342 } 345 }
343 } 346 }
344 347
@@ -369,14 +372,14 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -369,14 +372,14 @@ class TableManagerPageState extends State<TableManagerPage> {
369 372
370 selectDateStr = returnDayDateStr(dateTime); 373 selectDateStr = returnDayDateStr(dateTime);
371 selectWeekAndLunarCalendar = returnWeekAndLunarCalendar(dateTime, context); 374 selectWeekAndLunarCalendar = returnWeekAndLunarCalendar(dateTime, context);
372 - setState(() {});  
373 - bool showLoading = true;  
374 - if (tableManagerModel.pageStateOrReserve == PageState.Loading) {  
375 - showLoading = false;  
376 - }  
377 - tableManagerModel.getTableListOrReserve(  
378 - context, currTimeIndex, dateTime, selectNumber,  
379 - showLoading: showLoading); 375 + setState(() {});
  376 + bool showLoading = true;
  377 + if (tableManagerModel.pageStateOrReserve == PageState.Loading) {
  378 + showLoading = false;
  379 + }
  380 + tableManagerModel.getTableListOrReserve(
  381 + context, currTimeIndex, dateTime, selectNumber,
  382 + showLoading: showLoading);
380 } 383 }
381 384
382 String returnWeekAndLunarCalendar(DateTime day, BuildContext context) { 385 String returnWeekAndLunarCalendar(DateTime day, BuildContext context) {
@@ -603,20 +606,32 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -603,20 +606,32 @@ class TableManagerPageState extends State<TableManagerPage> {
603 getDzSellerConf() async { 606 getDzSellerConf() async {
604 MarketingCenterProvider marketingCenterProvider = 607 MarketingCenterProvider marketingCenterProvider =
605 Provider.of<MarketingCenterProvider>(context, listen: false); 608 Provider.of<MarketingCenterProvider>(context, listen: false);
606 - bool success = await marketingCenterProvider.getDzSellerConf(context,  
607 - showLoading: false); 609 + bool success = await marketingCenterProvider.getDzSellerConf(context);
608 if (success && marketingCenterProvider.dzSellerConfModel != null) { 610 if (success && marketingCenterProvider.dzSellerConfModel != null) {
609 - noticeSms = marketingCenterProvider.dzSellerConfModel.isNotice == '1' 611 + isAddOver = marketingCenterProvider.dzSellerConfModel.isAddOver == '1'
610 ? true 612 ? true
611 : false; 613 : false;
612 - if (!noticeSms) {  
613 - _getSmsInfo(context);  
614 - }  
615 - } else {  
616 - _getSmsInfo(context); 614 + setState(() {});
617 } 615 }
618 } 616 }
619 617
  618 + // getDzSellerConf() async {
  619 + // MarketingCenterProvider marketingCenterProvider =
  620 + // Provider.of<MarketingCenterProvider>(context, listen: false);
  621 + // bool success = await marketingCenterProvider.getDzSellerConf(context,
  622 + // showLoading: false);
  623 + // if (success && marketingCenterProvider.dzSellerConfModel != null) {
  624 + // noticeSms = marketingCenterProvider.dzSellerConfModel.isNotice == '1'
  625 + // ? true
  626 + // : false;
  627 + // if (!noticeSms) {
  628 + // _getSmsInfo(context);
  629 + // }
  630 + // } else {
  631 + // _getSmsInfo(context);
  632 + // }
  633 + // }
  634 +
620 ///获取短信内容 635 ///获取短信内容
621 /// 636 ///
622 637
@@ -768,6 +783,46 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -768,6 +783,46 @@ class TableManagerPageState extends State<TableManagerPage> {
768 783
769 /// Generate item number [i]. 784 /// Generate item number [i].
770 Widget item(int i) { 785 Widget item(int i) {
  786 + bool addOrder = true; //默认允许创建
  787 + //如果不允许新建过去的订单,则开始判断
  788 + if (!isAddOver) {
  789 + String times;
  790 + //找到当前餐段对应的时间段
  791 + if (currTimeIndex == 1) {
  792 + times = morning;
  793 + } else if (currTimeIndex == 2) {
  794 + times = noon;
  795 + } else if (currTimeIndex == 3) {
  796 + times = night;
  797 + } else if (currTimeIndex == 4) {
  798 + times = meal1;
  799 + } else if (currTimeIndex == 5) {
  800 + times = meal2;
  801 + }
  802 + //组装时间戳
  803 + List<String> datas = times.split('-');
  804 + // DateTime selectStime = DateTime.parse('${dateTimeSelect.year}' +
  805 + // '-' +
  806 + // '${dateTimeSelect.month}' +
  807 + // '-' +
  808 + // '${dateTimeSelect.day}' +
  809 + // ' ${datas[0]}:00'); //选中餐段开始时间戳
  810 + DateTime selectEtime = DateTime.parse('${dateTimeSelect.year}' +
  811 + '-' +
  812 + '${dateTimeSelect.month}' +
  813 + '-' +
  814 + '${dateTimeSelect.day}' +
  815 + ' ${datas[1]}:00'); //选中餐段结束时间戳
  816 + // 过去的餐段界定
  817 + if (selectEtime.isBefore(DateTime.now())) {
  818 +// 属于过去餐段
  819 + addOrder = false;
  820 + } else {
  821 + // 属于未来餐段
  822 + addOrder = true;
  823 + }
  824 + }
  825 +
771 return GridView.builder( 826 return GridView.builder(
772 // controller: _areaController, 827 // controller: _areaController,
773 // physics: NeverScrollableScrollPhysics(), 828 // physics: NeverScrollableScrollPhysics(),
@@ -802,7 +857,7 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -802,7 +857,7 @@ class TableManagerPageState extends State<TableManagerPage> {
802 fromPage: 'table_manage', 857 fromPage: 'table_manage',
803 canSelected: true, 858 canSelected: true,
804 selectTables: tableManagerModel.selectTablesOrReserve, 859 selectTables: tableManagerModel.selectTablesOrReserve,
805 - onSelected: (table) { 860 + addOrder:addOrder ,onSelected: (table) {
806 if (table.signStr == '已预订') { 861 if (table.signStr == '已预订') {
807 if (table.sign == '10') { 862 if (table.sign == '10') {
808 //宴会订单 863 //宴会订单
@@ -3866,7 +3921,7 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -3866,7 +3921,7 @@ class TableManagerPageState extends State<TableManagerPage> {
3866 .then((day) async { 3921 .then((day) async {
3867 if (day != null) { 3922 if (day != null) {
3868 createDateText1(context, day); 3923 createDateText1(context, day);
3869 - getMealSectionByDay(needInit: false); 3924 + getMealSectionByDay(needInit: false);
3870 bool success = 3925 bool success =
3871 await tableManagerModel.getTableListOrReserve( 3926 await tableManagerModel.getTableListOrReserve(
3872 context, 3927 context,
@@ -3898,8 +3953,9 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -3898,8 +3953,9 @@ class TableManagerPageState extends State<TableManagerPage> {
3898 }, 3953 },
3899 child: Container( 3954 child: Container(
3900 // height: w(35), 3955 // height: w(35),
3901 - height:(ScreenUtil().screenWidth-w(10)-w(18))/4*0.6,  
3902 - 3956 + height: (ScreenUtil().screenWidth - w(10) - w(18)) /
  3957 + 4 *
  3958 + 0.6,
3903 padding: EdgeInsets.symmetric( 3959 padding: EdgeInsets.symmetric(
3904 horizontal: w(10), 3960 horizontal: w(10),
3905 // vertical: ScreenUtil().setWidth(20) 3961 // vertical: ScreenUtil().setWidth(20)
@@ -3949,7 +4005,8 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -3949,7 +4005,8 @@ class TableManagerPageState extends State<TableManagerPage> {
3949 // ? ScreenUtil().setWidth(300) + ScreenUtil().setWidth(4) 4005 // ? ScreenUtil().setWidth(300) + ScreenUtil().setWidth(4)
3950 // : ScreenUtil().setWidth(300), 4006 // : ScreenUtil().setWidth(300),
3951 // height: w(28), 4007 // height: w(28),
3952 - height:(ScreenUtil().screenWidth-w(10)-w(18))/4*0.4, 4008 + height:
  4009 + (ScreenUtil().screenWidth - w(10) - w(18)) / 4 * 0.4,
3953 decoration: BoxDecoration( 4010 decoration: BoxDecoration(
3954 color: Colors.transparent, 4011 color: Colors.transparent,
3955 borderRadius: BorderRadius.only( 4012 borderRadius: BorderRadius.only(