Commit 51636af2650ac6ca60b9ebb52088444d4814c653

Authored by wdn127929
1 parent f2ec188f

宴会待跟进、定金管理ok

import 'package:common_utils/common_utils.dart';
class GetBanquetBeFollowModel {
int ret;
List<GetBanquetBeFollowSunModel> data;
String msg;
GetBanquetBeFollowModel({this.ret, this.data, this.msg});
GetBanquetBeFollowModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = <GetBanquetBeFollowSunModel>[];
json['data'].forEach((v) {
data.add(new GetBanquetBeFollowSunModel.fromJson(v));
});
}
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['msg'] = this.msg;
return data;
}
}
class GetBanquetBeFollowSunModel {
String id;
String rname;
String sex;
String staffId;
String ddate;
String classifyId;
dynamic contractFinalPrice;
String warrantId;
String className;
String nickName;
String account;
dynamic isDeposit;
dynamic isTids;
dynamic isSetmeal;
dynamic isContractFinalPrice;
dynamic isWarrant;
dynamic depositPrice;
//日期
String get ddateStr {
if (ddate.toString() == '0') {
return '';
}
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate.toString()) * 1000);
return DateUtil.formatDate(dateTime, format: DateFormats.mo_d);
}
GetBanquetBeFollowSunModel(
{this.id,
this.rname,
this.sex,
this.staffId,
this.ddate,
this.classifyId,
this.contractFinalPrice,
this.warrantId,
this.className,
this.nickName,
this.account,
this.isDeposit,
this.isTids,
this.isSetmeal,
this.isContractFinalPrice,
this.isWarrant,
this.depositPrice});
GetBanquetBeFollowSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
rname = json['rname'];
sex = json['sex'];
staffId = json['staff_id'];
ddate = json['ddate'];
classifyId = json['classify_id'];
contractFinalPrice = json['contract_final_price'];
warrantId = json['warrant_id'];
className = json['class_name'];
nickName = json['nick_name'];
account = json['account'];
isDeposit = json['is_deposit'];
isTids = json['is_tids'];
isSetmeal = json['is_setmeal'];
isContractFinalPrice = json['is_contract_final_price'];
isWarrant = json['is_warrant'];
depositPrice = json['deposit_price'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['rname'] = this.rname;
data['sex'] = this.sex;
data['staff_id'] = this.staffId;
data['ddate'] = this.ddate;
data['classify_id'] = this.classifyId;
data['contract_final_price'] = this.contractFinalPrice;
data['warrant_id'] = this.warrantId;
data['class_name'] = this.className;
data['nick_name'] = this.nickName;
data['account'] = this.account;
data['is_deposit'] = this.isDeposit;
data['is_tids'] = this.isTids;
data['is_setmeal'] = this.isSetmeal;
data['is_contract_final_price'] = this.isContractFinalPrice;
data['is_warrant'] = this.isWarrant;
data['deposit_price'] = this.depositPrice;
return data;
}
}
... ...
class SearchBanquetDepositModel {
int ret;
SearchBanquetDepositSunModel data;
String msg;
SearchBanquetDepositModel({this.ret, this.data, this.msg});
SearchBanquetDepositModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
data = json['data'] != null
? new SearchBanquetDepositSunModel.fromJson(json['data'])
: null;
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.toJson();
}
data['msg'] = this.msg;
return data;
}
}
class SearchBanquetDepositSunModel {
String id;
String rname;
String sex;
String staffId;
String ddate;
String classifyId;
String className;
String nickName;
String account;
String depositPrice;
String depositId;
String get ddateStr {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
return '${dateTime.month}月${dateTime.day}日';
}
SearchBanquetDepositSunModel(
{this.id,
this.rname,
this.sex,
this.staffId,
this.ddate,
this.classifyId,
this.className,
this.nickName,
this.account,
this.depositPrice,
this.depositId});
SearchBanquetDepositSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
rname = json['rname'];
sex = json['sex'];
staffId = json['staff_id'];
ddate = json['ddate'];
classifyId = json['classify_id'];
className = json['class_name'];
nickName = json['nick_name'];
account = json['account'];
depositPrice = json['deposit_price'];
depositId = json['deposit_id'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['rname'] = this.rname;
data['sex'] = this.sex;
data['staff_id'] = this.staffId;
data['ddate'] = this.ddate;
data['classify_id'] = this.classifyId;
data['class_name'] = this.className;
data['nick_name'] = this.nickName;
data['account'] = this.account;
data['deposit_price'] = this.depositPrice;
data['deposit_id'] = this.depositId;
return data;
}
}
... ...
... ... @@ -320,4 +320,13 @@ class HttpUrl {
static const String get_banquet_be_follow =
"?service=App.Banquet.GetBanquetBeFollow"; //根据时间范围查询待跟进订单
static const String search_banquet_deposit =
"?service=App.Banquet.SearchBanquetDeposit"; //根据定金编号搜索定金订单
static const String bank_banquet_deposit =
"?service=App.Banquet.BankBanquetDeposit"; //退定金
static const String get_exits_banquet_by_date =
"?service=App.Banquet.GetExitsBanquetByDate"; //查看指定时间内是否有宴会预定
}
... ...
... ... @@ -6,8 +6,11 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart';
import '../../provider/feast_model.dart';
import '../../provider/user_model.dart';
import '../../utils/utils.dart';
import '../../widgets/round_button.dart';
import '../../widgets/v_empty_view.dart';
... ... @@ -24,12 +27,17 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
CalendarController _calendarController = CalendarController();
DateTime dateTimeNow; //当前日期
bool calendarShow = true; //日历展开
FeastModel feastModel;
@override
void initState() {
// TODO: implement initState
super.initState();
dateTimeNow = DateTime.now();
Utils.changeStatusColor(color: MyColours.color_438E93);
WidgetsBinding.instance.addPostFrameCallback((_) {
_getExitsBanquetByDate();
});
}
//解析返回显示的日期
... ... @@ -48,8 +56,29 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
}
}
///查看指定时间内是否有宴会预定
_getExitsBanquetByDate() async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
DateTime firstDay = DateTime(dateTimeNow.year, dateTimeNow.month);
String startDay =
(firstDay.millisecondsSinceEpoch / 1000).floor().toString();
//下个月的第一天
DateTime lastDateTime = DateTime(dateTimeNow.year, dateTimeNow.month + 1);
//再减一天
DateTime lastDay = lastDateTime.subtract(Duration(days: 1));
String endDay = (lastDay.millisecondsSinceEpoch / 1000).floor().toString();
Map<String, String> pramas = {
'sid': userModel.user.sellerid,
'rdate': '${startDay}',
'edate': '${endDay}'
};
await feastModel.getExitsBanquetByDate(context, pramas, showLoading: true);
}
@override
Widget build(BuildContext context) {
feastModel = Provider.of<FeastModel>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -91,6 +120,27 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
availableGestures: AvailableGestures.none,
locale: "zh_CN",
onVisibleDaysChanged: (date1, date2, cal) async {
feastModel.fullStatusByTime = {};
print('r');
UserModel userModel =
Provider.of<UserModel>(context, listen: false);
String startDay = (date1.millisecondsSinceEpoch / 1000)
.floor()
.toString();
String endDay = (date2.millisecondsSinceEpoch / 1000)
.floor()
.toString();
Map<String, String> pramas = {
'sid': userModel.user.sellerid,
'rdate': '${startDay}',
'edate': '${endDay}'
};
await feastModel.getExitsBanquetByDate(context, pramas,
showLoading: true);
setState(() {});
},
initialCalendarFormat: calendarShow
? CalendarFormat.month
: CalendarFormat.week,
... ... @@ -151,6 +201,11 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
);
},
dayBuilder: (context, date, _) {
String keytemp = '${date.year}' +
'-' +
'${Utils.addZeroNumber(date.month)}' +
'-' +
'${Utils.addZeroNumber(date.day)}';
return Container(
// height: ScreenUtil().setWidth(210),
decoration: BoxDecoration(
... ... @@ -192,21 +247,31 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
fontSize: ScreenUtil().setSp(20),
color: MyColours.color_515151),
),
Container(
margin: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(4)),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setWidth(16),
decoration: BoxDecoration(
color: MyColours.color_E34D59,
borderRadius: BorderRadius.circular(
ScreenUtil().radius(8))),
)
feastModel.fullStatusByTime.keys
.contains(keytemp) &&
feastModel.fullStatusByTime[keytemp] ==
'1'
? Container(
margin: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(4)),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setWidth(16),
decoration: BoxDecoration(
color: MyColours.color_E34D59,
borderRadius: BorderRadius.circular(
ScreenUtil().radius(8))),
)
: SizedBox()
],
),
);
},
selectedDayBuilder: (context, date, _) {
String keytemp = '${date.year}' +
'-' +
'${Utils.addZeroNumber(date.month)}' +
'-' +
'${Utils.addZeroNumber(date.day)}';
return Container(
// alignment: Alignment.center,
// margin: EdgeInsets.fromLTRB(
... ... @@ -243,22 +308,32 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
fontSize: ScreenUtil().setSp(22),
color: MyColours.color_F6F6F6),
),
Container(
margin: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(4)),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setWidth(16),
decoration: BoxDecoration(
color: MyColours.color_E34D59,
borderRadius: BorderRadius.circular(
ScreenUtil().radius(8))),
)
feastModel.fullStatusByTime.keys
.contains(keytemp) &&
feastModel.fullStatusByTime[keytemp] ==
'1'
? Container(
margin: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(4)),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setWidth(16),
decoration: BoxDecoration(
color: MyColours.color_E34D59,
borderRadius: BorderRadius.circular(
ScreenUtil().radius(8))),
)
: SizedBox()
],
),
),
);
},
todayDayBuilder: (context, date, _) {
String keytemp = '${date.year}' +
'-' +
'${Utils.addZeroNumber(date.month)}' +
'-' +
'${Utils.addZeroNumber(date.day)}';
return Container(
// alignment: Alignment.center,
// margin: EdgeInsets.fromLTRB(
... ... @@ -295,16 +370,21 @@ class _FeastBoardPageState extends State<FeastBoardPage> {
fontSize: ScreenUtil().setSp(22),
color: MyColours.color_F6F6F6),
),
Container(
margin: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(4)),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setWidth(16),
decoration: BoxDecoration(
color: MyColours.color_E34D59,
borderRadius: BorderRadius.circular(
ScreenUtil().radius(8))),
)
feastModel.fullStatusByTime.keys
.contains(keytemp) &&
feastModel.fullStatusByTime[keytemp] ==
'1'
? Container(
margin: EdgeInsets.symmetric(
vertical: ScreenUtil().setWidth(4)),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setWidth(16),
decoration: BoxDecoration(
color: MyColours.color_E34D59,
borderRadius: BorderRadius.circular(
ScreenUtil().radius(8))),
)
: SizedBox()
],
),
),
... ...
... ... @@ -9,6 +9,7 @@ import 'package:provider/provider.dart';
import '../../constant/state.dart';
import '../../provider/feast_model.dart';
import '../../provider/user_model.dart';
import '../../utils/screen_util.dart';
import '../../utils/utils.dart';
import '../../widgets/MyDivider.dart';
... ... @@ -28,11 +29,83 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
FeastModel feastModel;
TextEditingController editingController = TextEditingController();
TextEditingController priceC = TextEditingController(); //退款金额
TextEditingController collectionC = TextEditingController(); //收款人
int czSelIndex;
List<String> payType = []; //支付方式
int payTypeIndex;
TextEditingController _cancelController = TextEditingController(); //备注
@override
void initState() {
super.initState();
payType = ['现金', '刷卡', '微信', '支付宝', '转账'];
Utils.changeStatusColor(color: MyColours.color_438E93);
WidgetsBinding.instance.addPostFrameCallback((_) {
// _searchBanquetDeposit();
_getSellerUserBySellerid();
});
}
///获取经理数据 ---- 接单人---全部员工
Future<bool> _getSellerUserBySellerid() async {
bool success = await feastModel.getAuthUserLists(context);
if (success) {
return true;
} else {
return false;
}
}
/// 根据时间范围查询待跟进订单
_searchBanquetDeposit() async {
Map<String, String> pramas = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
'no': editingController.text
}; //
bool success = await feastModel.searchBanquetDeposit(context, pramas);
if (success) {
// _uploadImageProvider.feastRemarkContractImageList = [];
// feastModel.banquetDetail.contractInfo.contractImages.forEach((element) {
// UploadImgModel uploadImgModel = UploadImgModel();
// uploadImgModel.process = 1;
// uploadImgModel.qiniuUrl = element.url;
// _uploadImageProvider.feastRemarkContractImageList.add(uploadImgModel);
// });
// setState(() {});
}
}
/// 退定金
_bankBanquetDeposit() async {
Map<String, String> pramas = {
'id': feastModel.depositsManagesData.depositId, //定金id
"rid": feastModel.depositsManagesData.id, //宴会id
'price': priceC.text,
'uid': feastModel.sellerManageList[czSelIndex].id,
'pay': payType[payTypeIndex], //支付方式
'collection': collectionC.text,
'reamrk': _cancelController.text
}; //
print(pramas);
bool success = await feastModel.bankBanquetDeposit(context, pramas);
if (success) {
priceC.text = '';
collectionC.text = '';
_searchBanquetDeposit();
// _uploadImageProvider.feastRemarkContractImageList = [];
// feastModel.banquetDetail.contractInfo.contractImages.forEach((element) {
// UploadImgModel uploadImgModel = UploadImgModel();
// uploadImgModel.process = 1;
// uploadImgModel.qiniuUrl = element.url;
// _uploadImageProvider.feastRemarkContractImageList.add(uploadImgModel);
// });
// setState(() {});
}
}
Widget buildFeastTypeHeader() {
... ... @@ -106,7 +179,15 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
)),
),
RoundButton(
onPressed: () async {},
onPressed: () async {
if (editingController.text.trim().length == 0) {
Utils.showToast('请输入收据编号');
return;
}
FocusScope.of(context).requestFocus(FocusNode());
_searchBanquetDeposit();
},
text: '搜索',
fontSize: 28,
isBold: false,
... ... @@ -126,10 +207,12 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
Widget buildFeastTypeItem() {
return Container(
margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(36)),
// height: h(99 * 2),
// margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(36)),
decoration: BoxDecoration(
// color: Colors.red,
border: Border.all(
color: MyColours.color_f3f3f3, width: ScreenUtil().setWidth(2)),
color: MyColours.color_ffffff, width: ScreenUtil().setWidth(2)),
boxShadow: [
BoxShadow(
color: MyColours.color_1F000000,
... ... @@ -154,14 +237,14 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'8月1日 午餐',
'${feastModel.depositsManagesData.ddateStr}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_F6F6F6,
fontSize: ScreenUtil().setSp(40)),
),
Text(
'婚宴',
'${feastModel.depositsManagesData.className}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_F6F6F6,
... ... @@ -186,11 +269,9 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
Wrap(
children: [
Text(
'[定金2000]',
'[定金${feastModel.depositsManagesData.depositPrice}]',
style: TextStyle(
color: true
? MyColours.color_00A870
: MyColours.color_E34D59,
color: MyColours.color_00A870,
fontSize: ScreenUtil().setSp(28)),
),
],
... ... @@ -200,7 +281,7 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'方先生 负责人:刘经理',
'${feastModel.depositsManagesData.rname} 跟单经理:${feastModel.depositsManagesData.nickName ?? feastModel.depositsManagesData.account}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_000000,
... ... @@ -208,18 +289,36 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
),
RoundButton(
onPressed: () async {
if (feastModel.depositsManagesData.depositPrice ==
'0') {
//已经全额退款,不再点击
return;
}
_showCancelWidget(context);
},
text: '退定金',
text: feastModel.depositsManagesData.depositPrice == '0'
? '已全额退回'
: '退定金',
fontSize: 28,
isBold: false,
height: h(28),
width: w(58),
// padding: EdgeInsets.symmetric(horizontal: w(8)),
width: feastModel.depositsManagesData.depositPrice == '0'
?w(86): w(58),
// margin: EdgeInsets.only(top: w(18), bottom: w(4)),
textColor: MyColours.color_F6F6F6,
gradientStart: MyColours.color_E34D59,
gradientEnd: MyColours.color_E34D59,
borderColor: MyColours.color_E34D59,
gradientStart:
feastModel.depositsManagesData.depositPrice == '0'
? MyColours.color_999999
: MyColours.color_E34D59,
gradientEnd:
feastModel.depositsManagesData.depositPrice == '0'
? MyColours.color_999999
: MyColours.color_E34D59,
borderColor:
feastModel.depositsManagesData.depositPrice == '0'
? MyColours.color_999999
: MyColours.color_E34D59,
radius: r(4),
),
],
... ... @@ -235,7 +334,7 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
///取消预订弹框
_showCancelWidget(context) {
ScrollController _scrollController = ScrollController();
TextEditingController _cancelController = TextEditingController();
FocusNode _cancelNode = FocusNode();
bool showPerson = true;
... ... @@ -261,6 +360,7 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
// Navigator.of(context).pop();
// },
child: Center(
child: SingleChildScrollView(
child: Stack(children: [
Container(
margin: EdgeInsets.symmetric(
... ... @@ -289,7 +389,7 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
),
),
_textfield('退款金额', '请输入', null, null, '元'),
_textfield('退款金额', '请输入', priceC, null, '元'),
_selectWidget('操作人', person, onTap: () {
state(() {
showType = true;
... ... @@ -302,7 +402,7 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
showType = !showType;
});
}),
_textfield('收款人', '请输入', null, null, '',
_textfield('收款人', '请输入', collectionC, null, '',
inputType: TextInputType.text),
VEmptyView(24),
Container(
... ... @@ -346,7 +446,7 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
// border: InputBorder.none,
onChanged: (_) {
setState(() {});
state(() {});
},
onEditingComplete: () {
print('fff');
... ... @@ -394,10 +494,46 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
fontSize: 32,
isBold: true,
onPressed: () {
if (priceC.text.trim().length == 0) {
Utils.showToast('请输入退款金额');
return;
}
bool isNumber = Utils.isNumeric(
priceC.text); //判断输入的内容是否是数字
if (!isNumber) {
Utils.showToast('退款金额请输入数字');
return;
}
if (double.parse(priceC.text) >
double.parse(feastModel
.depositsManagesData
.depositPrice)) {
//如果超过可退金额,自动把可退金额赋值给输入框
priceC.text = feastModel
.depositsManagesData
.depositPrice;
state(() {});
Utils.showToast(
'超过最大可退金额,已为您修改为最大金额');
return;
}
if (person == '请选择') {
Utils.showToast('请选择操作人');
return;
}
if (type == '请选择') {
Utils.showToast('请选择退款方式');
return;
}
if (collectionC.text.trim().length ==
0) {
Utils.showToast('请输入收款人');
return;
}
Navigator.of(context).pop();
Loading.showLoading(context);
// setReserveStatus('4', desc: desc);
_bankBanquetDeposit();
}),
])
],
... ... @@ -411,10 +547,16 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
child: Material(
color: Colors.transparent,
child: selectWidgetTableManage(
['dffd', 'fdf'], (index) {
feastModel.sellerManageList.map((item) {
return item.title;
}).toList(), (index) {
state(() {
showPerson = !showPerson;
person = ['dffd', 'fdf'][index];
czSelIndex = index;
person = feastModel.sellerManageList
.map((item) {
return item.title;
}).toList()[index];
});
}),
))),
... ... @@ -425,29 +567,17 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
offstage: showType,
child: Material(
color: Colors.transparent,
child: selectWidgetTableManage([
'dffd',
'fdf',
'dffd',
'fdf',
'dffd',
'fdf'
], (index) {
child:
selectWidgetTableManage(payType, (index) {
state(() {
showType = !showType;
type = [
'dffd',
'fdf',
'dffd',
'fdf',
'dffd',
'fdf'
][index];
payTypeIndex = index;
type = payType[index];
});
}),
))),
]),
));
)));
}));
});
}
... ... @@ -708,7 +838,6 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
@override
Widget build(BuildContext context) {
feastModel = Provider.of<FeastModel>(context);
feastModel.pageStateDepositData = PageState.Success;
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -720,70 +849,65 @@ class _FeastDepositDataPageState extends State<FeastDepositDataPage> {
Navigator.pop(context);
},
),
body: Column(
children: [
Expanded(
child: NestedScrollView(
// controller: _scrollViewController,
headerSliverBuilder:
(BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
pinned: true,
floating: false,
leading: null,
backgroundColor: MyColours.color_ffffff,
// expandedHeight: ScreenUtil().setWidth(128 * 2),
automaticallyImplyLeading: false,
toolbarHeight: ScreenUtil().setWidth(64 * 2),
title: buildFeastTypeHeader(),
// flexibleSpace: FlexibleSpaceBar(
// collapseMode: CollapseMode.pin,
// title: buildFeastTypeHeader())
)
];
}, body: Consumer<FeastModel>(builder: (context, model, _) {
if (model.pageStateDepositData != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateDepositData,
callback: () {
// _getWine();
},
emptyMsg: "暂时没有定金数据哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return ListView.builder(
itemCount: 100,
padding:
EdgeInsets.only(left: w(12), top: w(19), right: w(12)),
itemBuilder: (BuildContext context, int index) {
// WineSunModel data = feastModel.wineData[index];
return buildFeastTypeItem();
// '剑南春52度500ml', '1150元/份 不可议价'
});
}
}))),
Row(
children: [
Expanded(
child: _callButton(
onPress: () {
Navigator.pop(context);
},
content: '回到今天',
hasLeftBorder: true,
isSelect: false)),
Expanded(
child: _callButton(
onPress: () {},
content: '创建宴会',
hasLeftBorder: true,
isSelect: true))
],
)
],
body: Padding(
padding: EdgeInsets.only(left: w(12), top: w(19), right: w(12)),
child: Column(children: [
buildFeastTypeHeader(),
VEmptyView(66),
feastModel.depositsManagesData == null
? SizedBox()
: buildFeastTypeItem()
]),
// ) NestedScrollView(
// // controller: _scrollViewController,
// headerSliverBuilder:
// (BuildContext context, bool innerBoxIsScrolled) {
// return <Widget>[
// SliverAppBar(
// pinned: true,
// floating: false,
// leading: null,
// backgroundColor: MyColours.color_ffffff,
// // expandedHeight: ScreenUtil().setWidth(128 * 2),
// automaticallyImplyLeading: false,
// toolbarHeight: ScreenUtil().setWidth(64 * 2),
// title: buildFeastTypeHeader(),
// // flexibleSpace: FlexibleSpaceBar(
// // collapseMode: CollapseMode.pin,
// // title: buildFeastTypeHeader())
// )
// ];
// },
// body:
// // Consumer<FeastModel>(builder: (context, model, _) {
// // if (model.pageStateDepositData != PageState.Success) {
// // return ExceptionPage(
// // pageState: model.pageStateDepositData,
// // callback: () {
// // // _getWine();
// // },
// // emptyMsg: "暂时没有定金数据哦",
// // emptyImg: "empty_search",
// // showMsg: "加载中,请稍后...",
// // );
// // } else {
// // return
// feastModel.depositsManagesData == null
// ? SizedBox()
// : Padding(
// padding: EdgeInsets.only(
// left: w(12), top: w(19), right: w(12)),
// child: buildFeastTypeItem())
// // return ListView.builder(
// // itemCount: 100,
// // padding: EdgeInsets.only(left: w(12), top: w(19), right: w(12)),
// // itemBuilder: (BuildContext context, int index) {
// // // WineSunModel data = feastModel.wineData[index];
// // return ;
// // // '剑南春52度500ml', '1150元/份 不可议价'
// // });
// // }
// // })
));
}
}
... ...
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/get_banquet_be_follow_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/widgets/h_empty_view.dart';
... ... @@ -8,6 +10,9 @@ import 'package:provider/provider.dart';
import '../../constant/state.dart';
import '../../provider/feast_model.dart';
import '../../provider/user_model.dart';
import '../../route/navigator_util.dart';
import '../../utils/event_bus.dart';
import '../../utils/screen_util.dart';
import '../../utils/utils.dart';
import '../../widgets/MyDivider.dart';
... ... @@ -27,17 +32,104 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
FeastModel feastModel;
DateTime dateTimeStart;
DateTime dateTimeEnd;
String start = '请选择';
String end = '请选择';
bool isFeastTime = false;
String start = '不限';
String end = '不限';
bool isFeastTime = true; //ture 为宴会时间 false 为创建时间
@override
void initState() {
super.initState();
dateTimeStart = DateTime.now();
start = createDateText(context, dateTimeStart);
// start = createDateText(context, dateTimeStart);
dateTimeEnd = DateTime.now();
end = createDateText(context, dateTimeEnd);
// end = createDateText(context, dateTimeEnd);
Utils.changeStatusColor(color: MyColours.color_438E93);
WidgetsBinding.instance.addPostFrameCallback((_) {
_getBanquetBeFollow();
});
}
/// 根据时间范围查询待跟进订单
_getBanquetBeFollow() async {
Map<String, String> pramas = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
'type': isFeastTime ? '2' : '1'
}; //
if (start != '不限') {
pramas['rdate'] = _getRdate(dateTimeStart);
}
if (end != '不限') {
pramas['edate'] = _getEdate(dateTimeEnd);
}
bool success = await feastModel.getBanquetBeFollow(context, pramas);
if (success) {
// _uploadImageProvider.feastRemarkContractImageList = [];
// feastModel.banquetDetail.contractInfo.contractImages.forEach((element) {
// UploadImgModel uploadImgModel = UploadImgModel();
// uploadImgModel.process = 1;
// uploadImgModel.qiniuUrl = element.url;
// _uploadImageProvider.feastRemarkContractImageList.add(uploadImgModel);
// });
// setState(() {});
}
}
/// 设置丢单原因
_setBanquetLost(String lost, GetBanquetBeFollowSunModel data) async {
Map<String, String> pramas = {'rid': data.id, 'lost': lost}; //
bool success = await feastModel.setBanquetLost(context, pramas);
if (success) {
// _uploadImageProvider.feastRemarkContractImageList = [];
// feastModel.banquetDetail.contractInfo.contractImages.forEach((element) {
// UploadImgModel uploadImgModel = UploadImgModel();
// uploadImgModel.process = 1;
// uploadImgModel.qiniuUrl = element.url;
// _uploadImageProvider.feastRemarkContractImageList.add(uploadImgModel);
// });
// setState(() {});
_getBanquetBeFollow(); //刷新当前页面
bus.emit('feast_home_page'); //编辑之后刷新宴会首页
}
}
//获取一天开始时间字符串
String _getRdate(DateTime date) {
// String ymd = DateUtil.formatDate(date, format: DateFormats.y_mo_d);
String timeStrStart = '';
//一天开始时间
double startDay;
timeStrStart = date.year.toString() +
"-" +
Utils.addZeroNumber(date.month) +
"-" +
Utils.addZeroNumber(date.day) +
" 00:00:00";
startDay = (DateTime.parse(timeStrStart).millisecondsSinceEpoch) / 1000;
return startDay.floor().toString();
}
//获取一天结束时间字符串
String _getEdate(DateTime date) {
// String ymd = DateUtil.formatDate(date, format: DateFormats.y_mo_d);
String timeStrEnd = '';
//一天结束时间
double endDay;
timeStrEnd = date.year.toString() +
"-" +
Utils.addZeroNumber(date.month) +
"-" +
Utils.addZeroNumber(date.day) +
" 23:59:59";
endDay = (DateTime.parse(timeStrEnd).millisecondsSinceEpoch) / 1000;
return endDay.floor().toString();
}
//生成日期文本
... ... @@ -126,7 +218,9 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
),
Spacer(),
RoundButton(
onPressed: () async {},
onPressed: () async {
_getBanquetBeFollow();
},
text: '搜索',
fontSize: 28,
isBold: false,
... ... @@ -163,7 +257,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
start,
style: TextStyle(
fontSize: font(18),
color: start == '请选择'
color: start == '不限'
? MyColours.color_999999
: MyColours.color_515151),
),
... ... @@ -196,9 +290,8 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
Text(
end,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: font(18),
color: end == '请选择'
color: end == '不限'
? MyColours.color_999999
: MyColours.color_515151),
),
... ... @@ -216,7 +309,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
);
}
Widget buildFeastTypeItem() {
Widget buildFeastTypeItem(GetBanquetBeFollowSunModel data) {
return Container(
margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(36)),
decoration: BoxDecoration(
... ... @@ -246,14 +339,14 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'8月1日 午餐',
'${data.ddateStr}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_F6F6F6,
fontSize: ScreenUtil().setSp(40)),
),
Text(
'婚宴',
'${data.className}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_F6F6F6,
... ... @@ -278,41 +371,43 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
Wrap(
children: [
Text(
'[已选桌/未选桌]',
data.isTids == 1 ? '[已选桌]' : '[未选桌]',
style: TextStyle(
color: true
color: data.isTids == 1
? MyColours.color_00A870
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(28)),
),
Text(
' [已选套餐/未选套餐]',
data.isSetmeal == 1 ? ' [已选套餐]' : ' [未选套餐]',
style: TextStyle(
color: true
color: data.isSetmeal == 1
? MyColours.color_00A870
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(28)),
),
Text(
' [定金2000/未交定金]',
data.isDeposit == 1
? ' [定金${data.depositPrice}]'
: ' [未交定金]',
style: TextStyle(
color: true
color: data.isDeposit == 1
? MyColours.color_00A870
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(28)),
),
Text(
' [已担保/未担保]',
data.isWarrant == 1 ? ' [已担保]' : ' [未担保]',
style: TextStyle(
color: true
color: data.isWarrant == 1
? MyColours.color_00A870
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(28)),
),
Text(
' [已签约/未签约]',
data.isContractFinalPrice == 1 ? ' [已签约]' : ' [未签约]',
style: TextStyle(
color: true
color: data.isContractFinalPrice == 1
? MyColours.color_00A870
: MyColours.color_E34D59,
fontSize: ScreenUtil().setSp(28)),
... ... @@ -324,7 +419,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'方先生 负责人:刘经理',
'${data.rname} 跟单经理:${data.nickName ?? data.account}',
style: TextStyle(
fontWeight: FontWeight.bold,
color: MyColours.color_000000,
... ... @@ -332,7 +427,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
),
RoundButton(
onPressed: () async {
_showCancelWidget(context);
_showCancelWidget(context, data);
},
text: '丢单',
fontSize: 28,
... ... @@ -357,7 +452,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
}
///取消预订弹框
_showCancelWidget(context) {
_showCancelWidget(context, GetBanquetBeFollowSunModel data) {
ScrollController _scrollController = ScrollController();
TextEditingController _cancelController = TextEditingController();
FocusNode _cancelNode = FocusNode();
... ... @@ -646,8 +741,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
Navigator.of(context).pop();
Loading.showLoading(context);
// setReserveStatus('4', desc: desc);
_setBanquetLost(desc, data);
}),
])
],
... ... @@ -701,7 +795,6 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
@override
Widget build(BuildContext context) {
feastModel = Provider.of<FeastModel>(context);
feastModel.pageStateFollowUp = PageState.Success;
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -741,6 +834,7 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
pageState: model.pageStateFollowUp,
callback: () {
// _getWine();
_getBanquetBeFollow();
},
emptyMsg: "暂时没有待跟进宴会哦",
emptyImg: "empty_search",
... ... @@ -748,12 +842,14 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
);
} else {
return ListView.builder(
itemCount: 100,
// itemCount: feastModel.beFollowData.length,
itemCount: feastModel.beFollowData.length,
padding:
EdgeInsets.only(left: w(12), top: w(19), right: w(12)),
itemBuilder: (BuildContext context, int index) {
// WineSunModel data = feastModel.wineData[index];
return buildFeastTypeItem();
GetBanquetBeFollowSunModel data =
feastModel.beFollowData[index];
return buildFeastTypeItem(data);
// '剑南春52度500ml', '1150元/份 不可议价'
});
}
... ... @@ -763,14 +859,20 @@ class _FeastFollowUpPageState extends State<FeastFollowUpPage> {
Expanded(
child: _callButton(
onPress: () {
Navigator.pop(context);
dateTimeStart = DateTime.now();
start = createDateText(context, dateTimeStart);
dateTimeEnd = DateTime.now();
end = createDateText(context, dateTimeEnd);
setState(() {});
},
content: '回到今天',
hasLeftBorder: true,
isSelect: false)),
Expanded(
child: _callButton(
onPress: () {},
onPress: () {
NavigatorUtil.goFeastCreatePage(context);
},
content: '创建宴会',
hasLeftBorder: true,
isSelect: true))
... ...
... ... @@ -97,8 +97,8 @@ class _FeastItemState extends State<FeastItem> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
Wrap(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${widget.sunModel.rname} ${Utils.starPhone(widget.sunModel.phone)}',
... ...
... ... @@ -16,6 +16,7 @@ import '../../provider/user_model.dart';
import '../../res/colors.dart';
import '../../utils/event_bus.dart';
import '../../utils/screen_util.dart';
import '../../widgets/page_exception.dart';
class FeastPage extends StatefulWidget {
... ... @@ -34,11 +35,13 @@ class _FeastPageState extends State<FeastPage> {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_getBanquetByTime();
_getBanquetBeFollow();
// scrollController.jumpTo(scrollController.position.minScrollExtent);
});
bus.on("feast_home_page", (arg) {
_getBanquetByTime();
_getBanquetBeFollow();
});
}
... ... @@ -48,6 +51,16 @@ class _FeastPageState extends State<FeastPage> {
bus.off('feast_home_page');
}
/// 根据时间范围查询待跟进订单
_getBanquetBeFollow() async {
Map<String, String> pramas = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
'type': '2'
}; //
bool success = await feastModel.getBanquetBeFollow(context, pramas);
if (success) {}
}
///获取宴会详情
_getBanquetByTime() async {
DateTime now = DateTime.now();
... ... @@ -112,31 +125,39 @@ class _FeastPageState extends State<FeastPage> {
upAndDown('y_new', '新建宴会', onTap: () {
NavigatorUtil.goFeastCreatePage(context);
}),
Stack(clipBehavior: Clip.none, children: [
upAndDown('y_schedule', '待跟进', onTap: () {
NavigatorUtil.goFeastFollowUpPage(context);
}),
Positioned(
right: ScreenUtil().setWidth(-6),
bottom: ScreenUtil().setWidth(32),
child: Container(
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(ScreenUtil().setWidth(16)),
color: MyColours.color_E34D59),
width: ScreenUtil().setWidth(32),
height: ScreenUtil().setWidth(32),
child: Text(
'7',
style: TextStyle(
color: MyColours.color_F6F6F6,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(24)),
),
),
)
]),
InkWell(
onTap: () {
NavigatorUtil.goFeastFollowUpPage(context);
},
child: Stack(clipBehavior: Clip.none, children: [
upAndDown('y_schedule', '待跟进', onTap: () {
NavigatorUtil.goFeastFollowUpPage(context);
}),
feastModel.beFollowData != null &&
feastModel.beFollowData.length > 0
? Positioned(
right: ScreenUtil().setWidth(0),
bottom: ScreenUtil().setWidth(38),
child: Container(
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(16)),
color: MyColours.color_E34D59),
// width: ScreenUtil().setWidth(32),
height: ScreenUtil().setWidth(32),
padding: EdgeInsets.symmetric(horizontal: w(4)),
child: Text(
'${feastModel.beFollowData.length}',
style: TextStyle(
color: MyColours.color_F6F6F6,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(24)),
),
),
)
: SizedBox()
])),
upAndDown('y_money', '定金管理', onTap: () {
NavigatorUtil.goFeastDepositDataPage(context);
})
... ...
... ... @@ -10,6 +10,7 @@ import '../constant/error.dart';
import '../models/GetBanquetByTimeModel.dart';
import '../models/classify_model.dart';
import '../models/filter_btn_model.dart';
import '../models/get_banquet_be_follow_model.dart';
import '../models/get_banquet_by_id_new_model.dart';
import '../models/get_banquet_deposit_model.dart';
import '../models/get_deposit_model.dart';
... ... @@ -18,6 +19,7 @@ import '../models/get_setmeal_class_by_id_model.dart';
import '../models/get_staff_model.dart';
import '../models/otherset_model.dart';
import '../models/personnel_manage_model.dart';
import '../models/search_banquet_deposit_model.dart';
import '../models/sessions_model.dart';
import '../models/set_xuan_tai_model.dart';
import '../models/setmeal_by_id_model.dart';
... ... @@ -79,7 +81,130 @@ class FeastModel extends ChangeNotifier {
dynamic banquetDetailMap; //宴会详情信息--接口原始数据
List<GetBanquetByTimeSunModel> banquetHome; //宴会首页数据
PageState pageStateBeFollow = PageState.Loading; //待跟进订单
List<GetBanquetBeFollowSunModel> beFollowData; //待跟进订单数据
SearchBanquetDepositSunModel depositsManagesData; //根据定金编号搜索定金订单
Map<String, String> fullStatusByTime = {}; // 宴会看板 ---- 日历显示红点数据
/**
* 宴会看板
*/
//查看指定时间内是否有宴会预定
Future<Map> getExitsBanquetByDate(
BuildContext context, Map<String, String> params,
{showLoading = false}) async {
BaseResp<Map> baseResp = await DioUtil()
.request<Map>(context, Method.get, HttpUrl.get_exits_banquet_by_date,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {}
});
if (baseResp == null) return {};
if (baseResp.code == Constant.status_success) {
// fullStatusByTime = baseResp.data;
baseResp.data.forEach((key, value) {
// DateTime dateTime =
// DateTime.fromMillisecondsSinceEpoch(int.parse(key) * 1000);
// String keytemp = '${dateTime.month}' + '${dateTime.day}';
fullStatusByTime[key] = '${value}';
});
} else {
Utils.showToast(baseResp.msg ?? "");
}
notifyListeners();
return fullStatusByTime;
}
/**
* 宴会定金管理
*/
/// 根据定金编号搜索定金订单
Future<dynamic> searchBanquetDeposit(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.search_banquet_deposit,
data: params, showLoading: isShowLoading)
.catchError((error) {
print(error.toString());
// if (error is MyError) {
// switch (error.type) {
// case 1:
// pageStateDepositData = PageState.ConnectivityError;
// break;
// case 2:
// pageStateDepositData = PageState.ConnectivityTimeOut;
// break;
// default:
// pageStateDepositData = PageState.ConnectivityError;
// break;
// }
// }
// notifyListeners();
return false;
});
if (baseResp.code == Constant.status_success) {
// 输入的编号不存在的时候,怎么判断??
if (baseResp.data is List) {
Utils.showToast('您搜索的收据编号不存在,请重新输入!');
return;
}
depositsManagesData =
SearchBanquetDepositModel.fromJson(baseResp.responseData).data;
// if (baseResp.data == 1) {
// rid = baseResp.data['id'];
// if (beFollowData.length == 0) {
// pageStateFollowUp = PageState.Empty;
// } else {
// pageStateDepositData = PageState.Success;
// }
notifyListeners();
return true;
// } else {
// return false;
// }
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
// pageStateDepositData = PageState.ConnectivityError;
// notifyListeners();
return false;
}
}
/// 退定金
Future<dynamic> bankBanquetDeposit(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.bank_banquet_deposit,
data: params, showLoading: isShowLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {}
return false;
});
if (baseResp.code == Constant.status_success) {
// if (baseResp.data == 1) {
// rid = baseResp.data['id'];
return true;
// } else {
// return false;
// }
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
return false;
}
}
/**
* 宴会待跟进
... ... @@ -124,13 +249,13 @@ class FeastModel extends ChangeNotifier {
if (error is MyError) {
switch (error.type) {
case 1:
pageStateBeFollow = PageState.ConnectivityError;
pageStateFollowUp = PageState.ConnectivityError;
break;
case 2:
pageStateBeFollow = PageState.ConnectivityTimeOut;
pageStateFollowUp = PageState.ConnectivityTimeOut;
break;
default:
pageStateBeFollow = PageState.ConnectivityError;
pageStateFollowUp = PageState.ConnectivityError;
break;
}
}
... ... @@ -138,14 +263,15 @@ class FeastModel extends ChangeNotifier {
return false;
});
if (baseResp.code == Constant.status_success) {
// banquetHome = GetBanquetByTimeModel.fromJson(baseResp.responseData).data;
beFollowData =
GetBanquetBeFollowModel.fromJson(baseResp.responseData).data;
// if (baseResp.data == 1) {
// rid = baseResp.data['id'];
if (banquetHome.length == 0) {
pageStateBeFollow = PageState.Empty;
if (beFollowData.length == 0) {
pageStateFollowUp = PageState.Empty;
} else {
pageStateBeFollow = PageState.Success;
pageStateFollowUp = PageState.Success;
}
notifyListeners();
... ... @@ -157,7 +283,7 @@ class FeastModel extends ChangeNotifier {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
pageStateBeFollow = PageState.ConnectivityError;
pageStateFollowUp = PageState.ConnectivityError;
notifyListeners();
return false;
}
... ...