Commit 7cd067ad03e9ccc161cb82c1c556c41bae8a4d8d

Authored by wdn127929
1 parent 026ff30d

优惠券新增字段

/*
Flutter3.x完全开发手册 https://www.flutterschool.cn/
*/
import 'dart:convert';
class ADataExpirationDate {
/*
{
"valid_forever": "0",
"stime": "1741536000",
"etime": "1742486399"
}
*/
String? validForever;
String? stime;
String? etime;
ADataExpirationDate({
this.validForever,
this.stime,
this.etime,
});
ADataExpirationDate.fromJson(Map<String, dynamic> json) {
validForever = json['valid_forever']?.toString();
stime = json['stime']?.toString();
etime = json['etime']?.toString();
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['valid_forever'] = validForever;
data['stime'] = stime;
data['etime'] = etime;
return data;
}
}
class ADataAexpiration {
/*
{
"valid_forever": "0",
"stime": "1741536000",
"etime": "1742659199",
"today": null,
"tomorrow": null,
"sday": null,
"eday": null
}
*/
String? validForever;
String? stime;
String? etime;
String? today;
String? tomorrow;
String? sday;
String? eday;
ADataAexpiration({
this.validForever,
this.stime,
this.etime,
this.today,
this.tomorrow,
this.sday,
this.eday,
});
ADataAexpiration.fromJson(Map<String, dynamic> json) {
validForever = json['valid_forever']?.toString();
stime = json['stime']?.toString();
etime = json['etime']?.toString();
today = json['today']?.toString();
tomorrow = json['tomorrow']?.toString();
sday = json['sday']?.toString();
eday = json['eday']?.toString();
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['valid_forever'] = validForever;
data['stime'] = stime;
data['etime'] = etime;
data['today'] = today;
data['tomorrow'] = tomorrow;
data['sday'] = sday;
data['eday'] = eday;
return data;
}
}
class ADataArule {
/*
{
"is_same_day": "1",
"is_accumulation": "1",
"is_compartment": "1",
"is_eatin": "1",
"is_takeout": "1",
"is_appointment": "1",
"is_share_lose": "1",
"is_share_have": "1"
}
*/
String? isSameDay;
String? isAccumulation;
String? isCompartment;
String? isEatin;
String? isTakeout;
String? isAppointment;
String? isShareLose;
String? isShareHave;
ADataArule({
this.isSameDay,
this.isAccumulation,
this.isCompartment,
this.isEatin,
this.isTakeout,
this.isAppointment,
this.isShareLose,
this.isShareHave,
});
ADataArule.fromJson(Map<String, dynamic> json) {
isSameDay = json['is_same_day']?.toString();
isAccumulation = json['is_accumulation']?.toString();
isCompartment = json['is_compartment']?.toString();
isEatin = json['is_eatin']?.toString();
isTakeout = json['is_takeout']?.toString();
isAppointment = json['is_appointment']?.toString();
isShareLose = json['is_share_lose']?.toString();
isShareHave = json['is_share_have']?.toString();
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['is_same_day'] = isSameDay;
data['is_accumulation'] = isAccumulation;
data['is_compartment'] = isCompartment;
data['is_eatin'] = isEatin;
data['is_takeout'] = isTakeout;
data['is_appointment'] = isAppointment;
data['is_share_lose'] = isShareLose;
data['is_share_have'] = isShareHave;
return data;
}
}
class AData {
/*
{
"id": "1088",
"uid": "7035",
"sellerid": "4352",
"uid_list": null,
"is_type": "3",
"is_examine": "1",
"aname": "名称测试",
"desc": "200",
"stime": null,
"etime": null,
"explain": "",
"is_open": "1",
"price": "200",
"use": null,
"status": "1",
"grant_num": "100",
"grant_last": "100",
"urllink": "https://wxaurl.cn/7Dg2wrL8K2p",
"lite_qrcode": "https://xt04.colorcun.com/activity/LiteQRcode/activity_1088.jpeg",
"arule": {
"is_same_day": "1",
"is_accumulation": "1",
"is_compartment": "1",
"is_eatin": "1",
"is_takeout": "1",
"is_appointment": "1",
"is_share_lose": "1",
"is_share_have": "1"
},
"aexpiration": {
"valid_forever": "0",
"stime": "1741536000",
"etime": "1742659199",
"today": null,
"tomorrow": null,
"sday": null,
"eday": null
},
"expiration_date": {
"valid_forever": "0",
"stime": "1741536000",
"etime": "1742486399"
},
"cdate": "1741594601"
}
*/
String? id;
String? uid;
String? sellerid;
String? uidList;
String? isType;
String? isExamine;
String? aname;
String? desc;
String? stime;
String? etime;
String? explain;
String? isOpen;
String? price;
String? use;
String? status;
String? grantNum;
String? grantLast;
String? urllink;
String? liteQrcode;
ADataArule? arule;
ADataAexpiration? aexpiration;
ADataExpirationDate? expirationDate;
String? cdate;
AData({
this.id,
this.uid,
this.sellerid,
this.uidList,
this.isType,
this.isExamine,
this.aname,
this.desc,
this.stime,
this.etime,
this.explain,
this.isOpen,
this.price,
this.use,
this.status,
this.grantNum,
this.grantLast,
this.urllink,
this.liteQrcode,
this.arule,
this.aexpiration,
this.expirationDate,
this.cdate,
});
AData.fromJson(Map<String, dynamic> json) {
id = json['id']?.toString();
uid = json['uid']?.toString();
sellerid = json['sellerid']?.toString();
uidList = json['uid_list']?.toString();
isType = json['is_type']?.toString();
isExamine = json['is_examine']?.toString();
aname = json['aname']?.toString();
desc = json['desc']?.toString();
stime = json['stime']?.toString();
etime = json['etime']?.toString();
explain = json['explain']?.toString();
isOpen = json['is_open']?.toString();
price = json['price']?.toString();
use = json['use']?.toString();
status = json['status']?.toString();
grantNum = json['grant_num']?.toString();
grantLast = json['grant_last']?.toString();
urllink = json['urllink']?.toString();
liteQrcode = json['lite_qrcode']?.toString();
arule = (json['arule'] != null) ? ADataArule.fromJson(json['arule']) : null;
aexpiration = (json['aexpiration'] != null) ? (json['aexpiration'] is Map)? ADataAexpiration.fromJson(json['aexpiration']):ADataAexpiration.fromJson(jsonDecode(json['aexpiration'])) : null;
expirationDate = (json['expiration_date'] != null) ?(json['expiration_date'] is Map)? ADataExpirationDate.fromJson(json['expiration_date']): ADataExpirationDate.fromJson(jsonDecode(json['expiration_date'])) : null;
cdate = json['cdate']?.toString();
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['id'] = id;
data['uid'] = uid;
data['sellerid'] = sellerid;
data['uid_list'] = uidList;
data['is_type'] = isType;
data['is_examine'] = isExamine;
data['aname'] = aname;
data['desc'] = desc;
data['stime'] = stime;
data['etime'] = etime;
data['explain'] = explain;
data['is_open'] = isOpen;
data['price'] = price;
data['use'] = use;
data['status'] = status;
data['grant_num'] = grantNum;
data['grant_last'] = grantLast;
data['urllink'] = urllink;
data['lite_qrcode'] = liteQrcode;
if (arule != null) {
data['arule'] = arule!.toJson();
}
if (aexpiration != null) {
data['aexpiration'] = aexpiration!.toJson();
}
if (expirationDate != null) {
data['expiration_date'] = expirationDate!.toJson();
}
data['cdate'] = cdate;
return data;
}
}
class A {
/*
{
"ret": 200,
"data": [
{
"id": "1088",
"uid": "7035",
"sellerid": "4352",
"uid_list": null,
"is_type": "3",
"is_examine": "1",
"aname": "名称测试",
"desc": "200",
"stime": null,
"etime": null,
"explain": "",
"is_open": "1",
"price": "200",
"use": null,
"status": "1",
"grant_num": "100",
"grant_last": "100",
"urllink": "https://wxaurl.cn/7Dg2wrL8K2p",
"lite_qrcode": "https://xt04.colorcun.com/activity/LiteQRcode/activity_1088.jpeg",
"arule": {
"is_same_day": "1",
"is_accumulation": "1",
"is_compartment": "1",
"is_eatin": "1",
"is_takeout": "1",
"is_appointment": "1",
"is_share_lose": "1",
"is_share_have": "1"
},
"aexpiration": {
"valid_forever": "0",
"stime": "1741536000",
"etime": "1742659199",
"today": null,
"tomorrow": null,
"sday": null,
"eday": null
},
"expiration_date": {
"valid_forever": "0",
"stime": "1741536000",
"etime": "1742486399"
},
"cdate": "1741594601"
}
],
"msg": ""
}
*/
int? ret;
List<AData?>? data;
String? msg;
A({
this.ret,
this.data,
this.msg,
});
A.fromJson(Map<String, dynamic> json) {
ret = json['ret']?.toInt();
if (json['data'] != null) {
final v = json['data'];
final arr0 = <AData>[];
v.forEach((v) {
arr0.add(AData.fromJson(v));
});
this.data = arr0;
}
msg = json['msg']?.toString();
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
data['ret'] = ret;
if (this.data != null) {
final v = this.data;
final arr0 = [];
v!.forEach((v) {
arr0.add(v!.toJson());
});
data['data'] = arr0;
}
data['msg'] = msg;
return data;
}
}
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:one_key/models/CouponDataExpirationDate.dart';
import 'package:one_key/models/filter_btn_model.dart';
... ... @@ -107,12 +108,15 @@ class CouponSunModel extends Object {
@JsonKey(name: 'lite_qrcode')
String? liteQrcode;
@JsonKey(name: 'aexpiration')
String? aexpiration;
// @JsonKey(name: 'aexpiration')
// String? aexpiration;
@JsonKey(name: 'number')
int number;
ADataAexpiration? aexpiration;
ADataExpirationDate? expirationDate;
// arule 券使用和分享规则 领取后有效天数
bool isCheck = false;
... ... @@ -147,8 +151,11 @@ class CouponSunModel extends Object {
this.grantNum,
this.urllink,
this.liteQrcode,
// this.aexpiration,
this.number,
this.aexpiration,
this.number);
this.expirationDate,
);
factory CouponSunModel.fromJson(Map<String, dynamic> srcJson) =>
_$CouponSunModelFromJson(srcJson);
... ...
... ... @@ -25,6 +25,27 @@ Map<String, dynamic> _$CouponModelToJson(CouponModel instance) =>
};
CouponSunModel _$CouponSunModelFromJson(Map<String, dynamic> json) {
ADataExpirationDate? date;
if (json['expiration_date'] == null) {
date = ADataExpirationDate(
stime: json['stime'], etime: json['etime'], validForever: '0');
}
ADataAexpiration? aexpiration;
if (json['aexpiration'] != null) {
if ((json['aexpiration'] is Map)) {
aexpiration = ADataAexpiration.fromJson(json['aexpiration']);
} else if (json['aexpiration'] is String) {
if (json['aexpiration'].contains('stime')) {
aexpiration =
ADataAexpiration.fromJson(jsonDecode(json['aexpiration']));
} else {
aexpiration = json['aexpiration'] == '0'
? ADataAexpiration(etime: json['etime'] ?? '')
: ADataAexpiration(today: json['aexpiration']);
}
}
}
return CouponSunModel(
json['id'] as String?,
json['uid'] as String?,
... ... @@ -69,8 +90,15 @@ CouponSunModel _$CouponSunModelFromJson(Map<String, dynamic> json) {
json['grant_num'] as String?,
json['urllink'] as String?,
json['lite_qrcode'] as String?,
json['aexpiration'] as String?,
(json['number'] ?? 1) as int);
// json['aexpiration'] as String?,
(json['number'] ?? 1) as int,
aexpiration,
(json['expiration_date'] != null)
? (json['expiration_date'] is Map)
? ADataExpirationDate.fromJson(json['expiration_date'])
: ADataExpirationDate.fromJson(
jsonDecode(json['expiration_date']))
: date);
}
Map<String, dynamic> _$CouponSunModelToJson(CouponSunModel instance) =>
... ... @@ -100,8 +128,9 @@ Map<String, dynamic> _$CouponSunModelToJson(CouponSunModel instance) =>
'grant_num': instance.grantNum,
'urllink': instance.urllink,
'lite_qrcode': instance.liteQrcode,
'number': instance.number,
'aexpiration': instance.aexpiration,
'number': instance.number
'expiration_date': instance.expirationDate,
};
CouponUse _$CouponUseFromJson(Map<String, dynamic> json) {
... ... @@ -223,17 +252,17 @@ Arule _$AruleFromJson(Map<String, dynamic> json) {
// }
return Arule(
isSameDay,
isAccumulation,
isCompartment,
isEatin,
isTakeout,
isAppointment,
isShareLose,
isShareHave,
// isCommission,
// json['commission']
);
isSameDay,
isAccumulation,
isCompartment,
isEatin,
isTakeout,
isAppointment,
isShareLose,
isShareHave,
// isCommission,
// json['commission']
);
}
Map<String, dynamic> _$AruleToJson(Arule instance) => <String, dynamic>{
... ...
... ... @@ -144,7 +144,7 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
fontSize: ScreenUtil().setSp(32)),
),
),
HEmptyView(60),
HEmptyView(10),
Expanded(
child: Text(
subTitle,
... ... @@ -326,6 +326,49 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
@override
Widget build(BuildContext context) {
couponProvider = Provider.of<CouponProvider>(context, listen: true);
String aexpirationStr = '';
if (couponProvider.couponSunModel?.aexpiration != null) {
if (couponProvider.couponSunModel!.aexpiration!.validForever == '1') {
aexpirationStr = '永久有效';
} else if (couponProvider.couponSunModel!.aexpiration!.stime != null) {
DateTime dateTimes = DateTime.fromMillisecondsSinceEpoch(int.parse(
couponProvider.couponSunModel!.aexpiration!.stime.toString()) *
1000);
DateTime dateTimee = DateTime.fromMillisecondsSinceEpoch(int.parse(
couponProvider.couponSunModel!.aexpiration!.etime.toString()) *
1000);
String fromDate = '${dateTimes.year}' +
'-${Utils.addZeroNumber(dateTimes.month)}' +
'-${Utils.addZeroNumber(dateTimes.day)}'; //活动有效期开始时间
String endDate = '${dateTimee.year}' +
'-${Utils.addZeroNumber(dateTimee.month)}' +
'-${Utils.addZeroNumber(dateTimee.day)}';
aexpirationStr = fromDate + '至' + endDate;
} else if (couponProvider.couponSunModel!.aexpiration!.stime == null &&
couponProvider.couponSunModel!.aexpiration!.etime != null) {
DateTime dateTimee = DateTime.fromMillisecondsSinceEpoch(int.parse(
couponProvider.couponSunModel!.aexpiration!.etime.toString()) *
1000);
String endDate = '${dateTimee.year}' +
'-${Utils.addZeroNumber(dateTimee.month)}' +
'-${Utils.addZeroNumber(dateTimee.day)}';
aexpirationStr = '领取日起' + '至' + endDate;
} else if (couponProvider.couponSunModel!.aexpiration!.today != null &&
couponProvider.couponSunModel!.aexpiration!.today != '') {
aexpirationStr =
'领券当日起${couponProvider.couponSunModel!.aexpiration!.today}天内可用';
} else if (couponProvider.couponSunModel!.aexpiration!.tomorrow != null &&
couponProvider.couponSunModel!.aexpiration!.tomorrow != '') {
aexpirationStr =
'领券次日起${couponProvider.couponSunModel!.aexpiration!.tomorrow}天内可用';
} else if (couponProvider.couponSunModel!.aexpiration!.sday != null &&
couponProvider.couponSunModel!.aexpiration!.sday != '') {
aexpirationStr =
'领券后第${couponProvider.couponSunModel!.aexpiration!.sday}天至${couponProvider.couponSunModel!.aexpiration!.eday}天可用';
}
}
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -515,18 +558,12 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
),
VEmptyView(24),
_item(
'活动开始于',
Utils.getDateStrFromJiekou(
couponProvider.couponSunModel!.stime)),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_E7E7E7,
),
VEmptyView(24),
_item(
'活动结束于',
Utils.getDateStrFromJiekou(
couponProvider.couponSunModel!.etime)),
'活动有效期',
couponProvider.couponSunModel!.expirationDate
?.validForever ==
'1'
? '永久有效'
: '${Utils.getDateStrFromJiekou(couponProvider.couponSunModel!.expirationDate?.stime)}至${Utils.getDateStrFromJiekou(couponProvider.couponSunModel!.expirationDate?.etime)}'),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_E7E7E7,
... ... @@ -535,10 +572,7 @@ class _CouponDetailPageState extends State<CouponDetailPage> {
VEmptyView(24),
if (couponProvider.couponSunModel!.isType == '3' ||
couponProvider.couponSunModel!.isType == '4')
_item(
'领取后有效天数',
couponProvider.couponSunModel!.aexpiration ??
''),
_item('用户领取后有效期', aexpirationStr),
if ((couponProvider.couponSunModel!.isType == '3' ||
couponProvider.couponSunModel!.isType ==
... ...
... ... @@ -229,16 +229,93 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
_couponNameEditControl.text = widget.couponSunModel!.aname ?? "";
_couponRequireEditControl.text = widget.couponSunModel!.desc ?? "";
_couponExplainEditControl.text = widget.couponSunModel!.explain ?? "";
DateTime dateTimes = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.couponSunModel!.stime.toString()) * 1000);
fromDate = DateUtil.formatDate(dateTimes, format: DateFormats.y_mo_d);
DateTime dateTimee = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.couponSunModel!.etime.toString()) * 1000);
endDate = DateUtil.formatDate(dateTimee, format: DateFormats.y_mo_d);
// DateTime dateTimes = DateTime.fromMillisecondsSinceEpoch(
// int.parse(widget.couponSunModel!.expirationDate!.stime.toString()) * 1000);
// fromDate = DateUtil.formatDate(dateTimes, format: DateFormats.y_mo_d);
// DateTime dateTimee = DateTime.fromMillisecondsSinceEpoch(
// int.parse(widget.couponSunModel!.etime.toString()) * 1000);
// endDate = DateUtil.formatDate(dateTimee, format: DateFormats.y_mo_d);
swichState = widget.couponSunModel!.status == '1' ? true : false;
_priceControl.text = widget.couponSunModel!.price;
_limitDay.text = widget.couponSunModel!.aexpiration ?? '';
if (widget.couponSunModel!.expirationDate != null) {
validForever =
widget.couponSunModel!.expirationDate!.validForever == '1'
? true
: false;
DateTime dateTimes = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.couponSunModel!.expirationDate!.stime.toString()) *
1000);
DateTime dateTimee = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.couponSunModel!.expirationDate!.etime.toString()) *
1000);
fromDate = '${dateTimes.year}' +
'-${Utils.addZeroNumber(dateTimes.month)}' +
'-${Utils.addZeroNumber(dateTimes.day)}'; //活动有效期开始时间
endDate = '${dateTimee.year}' +
'-${Utils.addZeroNumber(dateTimee.month)}' +
'-${Utils.addZeroNumber(dateTimee.day)}';
}
if (widget.couponSunModel!.aexpiration != null) {
validForeverCus =
widget.couponSunModel!.aexpiration!.validForever == '1'
? true
: false;
if (widget.couponSunModel!.aexpiration!.stime != null) {
fromToEndDateCus = true;
DateTime dateTimes = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.couponSunModel!.aexpiration!.stime.toString()) *
1000);
DateTime dateTimee = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.couponSunModel!.aexpiration!.etime.toString()) *
1000);
fromDateCus = '${dateTimes.year}' +
'-${Utils.addZeroNumber(dateTimes.month)}' +
'-${Utils.addZeroNumber(dateTimes.day)}'; //领取后有效期开始时间
endDateCus = '${dateTimee.year}' +
'-${Utils.addZeroNumber(dateTimee.month)}' +
'-${Utils.addZeroNumber(dateTimee.day)}';
}
if (widget.couponSunModel!.aexpiration!.today != null &&
widget.couponSunModel!.aexpiration!.today != '') {
todayCus = true;
todayC.text = widget.couponSunModel!.aexpiration!.today ?? '';
}
if (widget.couponSunModel!.aexpiration!.tomorrow != null &&
widget.couponSunModel!.aexpiration!.tomorrow != '') {
tomorrowCus = true;
tomorrowC.text = widget.couponSunModel!.aexpiration!.tomorrow ?? '';
}
if (widget.couponSunModel!.aexpiration!.sday != null &&
widget.couponSunModel!.aexpiration!.sday != '') {
fromToEndDayCus = true;
fromDayC.text = widget.couponSunModel!.aexpiration!.sday ?? '';
endDayC.text = widget.couponSunModel!.aexpiration!.eday ?? '';
}
}
// bool validForever = false;
// bool validForeverCus = false;
// bool fromToEndDateCus = true;
// bool todayCus = false;
// bool tomorrowCus = false;
// bool fromToEndDayCus = false;
// String fromDateCus = '点击选择开始日期'; //领取后有效期开始时间
// String endDateCus = '点击选择结束日期'; //领取后有效期结束时间
// TextEditingController todayC = TextEditingController();
// TextEditingController tomorrowC = TextEditingController();
// TextEditingController fromDayC = TextEditingController();
// TextEditingController endDayC = TextEditingController();
// stime 开始日期
// etime 结束日期
// today 领券当日起天数
// tomorrow 领券次日起天数
// sday 领券后第几天的开始天数
// eday 领券后第几天的结束天数
isSameDay = widget.couponSunModel!.arule!.isSameDay;
isAccumulation = widget.couponSunModel!.arule!.isAccumulation;
... ... @@ -361,25 +438,61 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
_createNewCoupon() async {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
String from = fromDate + ' 00:00:00';
String end = endDate + ' 23:59:59';
Map<String, String?> params = {
"uid": Provider.of<UserModel>(context, listen: false).user!.openid,
"aname": _couponNameEditControl.text.trim(),
"desc": _couponRequireEditControl.text.trim(),
"stime": fromDate == '点击选择'
? ""
: '${(DateUtil.getDateMsByTimeStr(from)! / 1000).floor()}',
"etime": endDate == '点击选择'
? ''
: '${(DateUtil.getDateMsByTimeStr(end)! / 1000).floor()}',
// 'stime': fromDate == '点击选择开始日期'
// ? ""
// : '${(DateUtil.getDateMsByTimeStr('${fromDate} 00:00:00')! / 1000).floor()}',
// 'etime': endDate == '点击选择结束日期'
// ? ''
// : '${(DateUtil.getDateMsByTimeStr('${endDate} 23:59:59')! / 1000).floor()}',
"explain": _couponExplainEditControl.text,
"is_open": swichState ? "1" : "0",
"status": swichState ? "1" : "0",
'is_type': widget.isMine ? "3" : "4"
};
params['aexpiration'] = _limitDay.text;
Map<String, String?> aexpiration = {
'valid_forever': validForeverCus ? '1' : '0',
'stime': fromToEndDateCus
? fromDateCus == '点击选择开始日期'
? ""
: '${(DateUtil.getDateMsByTimeStr('${fromDateCus} 00:00:00')! / 1000).floor()}'
: null,
'etime': fromToEndDateCus
? fromDate == '点击选择结束日期'
? ""
: '${(DateUtil.getDateMsByTimeStr('${endDateCus} 23:59:59')! / 1000).floor()}'
: null,
'today': todayCus ? todayC.text : null,
'tomorrow': tomorrowCus ? tomorrowC.text : null,
'sday': fromToEndDayCus ? fromDayC.text : null,
'eday': fromToEndDayCus ? endDayC.text : null
};
params['aexpiration'] = jsonEncode(aexpiration);
if (!validForever) {
params['stime'] =
'${(DateUtil.getDateMsByTimeStr('${fromDate} 00:00:00')! / 1000).floor()}';
params['etime'] =
'${(DateUtil.getDateMsByTimeStr('${endDate} 23:59:59')! / 1000).floor()}';
}
// aexpiration
//活动有效期
Map<String, String> expirationDate = {
'valid_forever': validForever ? '1' : '0',
'stime': fromDate == '点击选择开始日期'
? ""
: '${(DateUtil.getDateMsByTimeStr('${fromDate} 00:00:00')! / 1000).floor()}',
'etime': endDate == '点击选择结束日期'
? ''
: '${(DateUtil.getDateMsByTimeStr('${endDate} 23:59:59')! / 1000).floor()}',
};
params['expiration_date'] = jsonEncode(expirationDate);
// params['arule'] = ;
params['price'] =
... ... @@ -1803,8 +1916,12 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
child: Text(fromDateCus,
style: TextStyle(
fontSize: font(14),
color: MyColours
.color_999999)),
color: fromDateCus ==
'点击选择开始日期'
? MyColours
.color_999999
: MyColours
.color_515151)),
)),
HEmptyView(10),
Text('至',
... ... @@ -1871,8 +1988,12 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
child: Text(endDateCus,
style: TextStyle(
fontSize: font(14),
color: MyColours
.color_999999)),
color: endDateCus ==
'点击选择结束日期'
? MyColours
.color_999999
: MyColours
.color_515151)),
)),
],
)),
... ... @@ -2647,11 +2768,11 @@ class _CouponEidtPageState extends State<CouponEidtPage> {
Utils.showToast('请输入领券后第几天至第几天可用的结束天数!');
return;
}
if(int.parse(endDayC.text.trim()) < int.parse(fromDayC.text.trim())){
Utils.showToast('领券后第几天至第几天可用的结束天数须大于开始天数!');
if (int.parse(endDayC.text.trim()) <
int.parse(fromDayC.text.trim())) {
Utils.showToast('领券后第几天至第几天可用的结束天数须大于开始天数!');
return;
}
}
// if (_limitDay.text.trim().length == 0) {
... ...
... ... @@ -60,7 +60,7 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver {
late CreateStoreModel createStoreModel;
Fluwx fluwx = Fluwx();
late Function(WeChatResponse) responseListener;
Function(WeChatResponse)? responseListener;
@override
void initState() {
... ... @@ -88,7 +88,10 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver {
@override
void dispose() {
super.dispose();
fluwx.removeSubscriber(responseListener);
if(responseListener != null){
fluwx.removeSubscriber(responseListener!);
}
WidgetsBinding.instance.removeObserver(this);
}
... ... @@ -193,7 +196,7 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver {
// Utils.showToast(res.errStr??"登录失败,请稍后重试");
}
};
fluwx.addSubscriber(responseListener);
fluwx.addSubscriber(responseListener!);
}
//获取用户信息
... ...
import 'dart:async';
import 'package:flutter/material.dart';
... ... @@ -74,14 +73,14 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
marketingCenterProvider.saiYouYunFixedData!.forEach((element) {
if (element.temp == widget.smsTemplate) {
element.select = true;
controller.text = element.content??"";
controller.text = element.content ?? "";
}
});
}
marketingCenterProvider.notifyListeners();
}
Future<bool> _getSaiYouYunChangeList() async {
Future<bool> _getSaiYouYunChangeList() async {
bool sucess = await marketingCenterProvider.getSaiYouYunChangeList(context);
if (sucess) {
if (widget.smsTemplate != null && widget.smsTemplate!.length > 0) {
... ... @@ -106,38 +105,36 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
}
_getData() async {
(bool, bool) result = await (
_getSmsChangeField(), _getSaiYouYunChangeList()
).wait;
(bool, bool) result =
await (_getSmsChangeField(), _getSaiYouYunChangeList()).wait;
if (result.$1 && result.$2) {
//成功
String? temp = widget.bookinginfo;
marketingCenterProvider.smsChangeFieldData!.forEach((element) {
int count = widget.bookinginfo!.split(element.code!).length - 1;
element.times = count;
if (temp!.contains(element.code!)) {
temp = temp!.replaceAll(element.code!, element.show!);
}
});
// if (contentChangeStart.endsWith('\n')) {
// print(temp);
// String result = temp.substring(1, temp.length);
// print(result);
// controller.text =
// temp.startsWith('\n') ? temp.substring(1, temp.length) : temp;
// }
controller.text = temp??"";
print(controller.text);
setState(() {});
//成功
String? temp = widget.bookinginfo;
marketingCenterProvider.smsChangeFieldData!.forEach((element) {
int count = widget.bookinginfo!.split(element.code!).length - 1;
element.times = count;
if (temp!.contains(element.code!)) {
temp = temp!.replaceAll(element.code!, element.show!);
}
});
// if (contentChangeStart.endsWith('\n')) {
// print(temp);
// String result = temp.substring(1, temp.length);
// print(result);
// controller.text =
// temp.startsWith('\n') ? temp.substring(1, temp.length) : temp;
// }
controller.text = temp ?? "";
print(controller.text);
setState(() {});
}
}
/// 获取可变模板允许配置字段
Future<bool> _getSmsChangeField() async {
Future<bool> _getSmsChangeField() async {
bool suceess = await marketingCenterProvider.getSmsChangeField(context);
if (suceess) {
return true;
... ... @@ -147,8 +144,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
}
///设置店铺短信可变模版
_saveSaiYouYunChange(String text,
{bool isShowLoading = true}) async {
_saveSaiYouYunChange(String text, {bool isShowLoading = true}) async {
Map<String, String?> params = {
'sid': Provider.of<UserModel>(context, listen: false).user!.sellerid,
'sms_code': smsSelectValue,
... ... @@ -173,7 +169,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
}
///设置店铺短信固定模版
Future <bool> _setTempleteSMS({bool isShowLoading = true}) async {
Future<bool> _setTempleteSMS({bool isShowLoading = true}) async {
Map<String, String?> params = {
'sid': Provider.of<UserModel>(context, listen: false).user!.sellerid,
'key': 'saiyouyun',
... ... @@ -198,7 +194,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
List<Widget> templateWidgets(String title, List<SaiYouYunSunModel> temData) {
List<Widget> data = [];
for (var i = 0; i < temData.length; i++) {
data.add(btnItem(temData[i].temp!, temData[i].select, onTap: () {
data.add(btnItem('固定${i + 1}', temData[i].select, onTap: () {
// if (title == '固定模版') {
canChange = false;
marketingCenterProvider.saiYouYunFixedData!.forEach((element) {
... ... @@ -239,7 +235,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
String title, List<SaiYouYunChangeSunModel> temData) {
List<Widget> data = [];
for (var i = 0; i < temData.length; i++) {
data.add(btnItem(temData[i].temp!, temData[i].select, onTap: () {
data.add(btnItem('自定义${i + 1}', temData[i].select, onTap: () {
// if (!canChange) {
//从固定模版变更过来的,清空文本框内容
controller.text = temData[i].now == null
... ... @@ -284,8 +280,9 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
for (var i = 0;
i < marketingCenterProvider.smsChangeFieldData!.length;
i++) {
data.add(btnItem(marketingCenterProvider.smsChangeFieldData![i].name!, true,
onTap: () {
data.add(
btnItem(marketingCenterProvider.smsChangeFieldData![i].name!, true,
onTap: () {
marketingCenterProvider.smsChangeFieldData![i].times++;
print(controller.text);
... ... @@ -295,7 +292,7 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
if (cursorPosition != -1) {
// 插入文本
controller.text = controller.text.substring(0, cursorPosition) +
(marketingCenterProvider.smsChangeFieldData![i].show??"") +
(marketingCenterProvider.smsChangeFieldData![i].show ?? "") +
controller.text.substring(cursorPosition);
print(controller.text);
... ... @@ -310,7 +307,8 @@ class _SmsTemplateSettingPageState extends State<SmsTemplateSettingPage> {
// cursorPosition = _cursorPosition;
});
} else {
controller.text += marketingCenterProvider.smsChangeFieldData![i].show!;
controller.text +=
marketingCenterProvider.smsChangeFieldData![i].show!;
}
}));
}
... ...
... ... @@ -135,6 +135,8 @@ class MarketingCenterProvider extends ChangeNotifier {
saiYouYunFixedData = SaiYouYunModel.fromJson(
baseResp.responseData as Map<String, dynamic>)
.data;
// if (saiYouYunFixedData.length > 0) {
// saiYouYunFixedData[0].select = true;
// }
... ...