Commit b3a1b2ebd0359a481c5f7b4fa8852a1d5cc6e516

Authored by wdn127929
1 parent 851b2266

逻辑

class StaticsModel extends Object {
bool select;
String numstr;
String name;
String phone;
String count;
}
... ...
... ... @@ -6,6 +6,7 @@ import 'package:one_key/pages/coupon/coupon_item.dart';
import 'package:one_key/provider/coupon_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
... ... @@ -17,9 +18,9 @@ import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
class CouponSelectPage extends StatefulWidget {
final String rid;
final String from;
final bool hasModify;
CouponSelectPage({Key key, this.rid, this.hasModify}) : super(key: key);
CouponSelectPage({Key key, this.from, this.hasModify}) : super(key: key);
@override
_CouponSelectPageState createState() => _CouponSelectPageState();
... ... @@ -232,7 +233,17 @@ class _CouponSelectPageState extends State<CouponSelectPage> {
ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () async {
Navigator.pop(context);
if (widget.from == 'statistics') {
DialogUtil.cupertinoAlertDialog(context,
title: '确认发送',
content: '是否确定为当前所选顾客发送该优惠券', lCallback: () {
print('取消发送');
}, rCallback: () {
print('确定发送');
});
} else {
Navigator.pop(context);
}
},
text: '已选${couponProvider.coupons.length}个 确定',
fontSize: 34,
... ...
... ... @@ -1045,7 +1045,7 @@ class InvicationPageState extends State<InvicationPage> {
? GestureDetector(
onTap: () async {
NavigatorUtil.goCouponSelectPage(context,
rid: widget.rid,
from: 'other',
hasModify: couponProvider.hasModify);
},
behavior: HitTestBehavior.opaque,
... ... @@ -1086,7 +1086,7 @@ class InvicationPageState extends State<InvicationPage> {
onPressed: () async {
NavigatorUtil.goCouponSelectPage(
context,
rid: widget.rid,
from: 'other',
hasModify:
couponProvider.hasModify);
},
... ...
... ... @@ -2,6 +2,7 @@ import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/statics_model.dart';
import 'package:one_key/provider/statistics_provider.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
... ... @@ -16,6 +17,7 @@ import 'package:provider/provider.dart';
typedef ClickCallback = void Function(String value);
enum TimeType { TimeTypeStart, TimeTypeEnd, TimeTypeDefalt }
enum TableItemType { TableItemTypeHeader, TableItemTypeBody }
typedef IntCallback = void Function(int value);
class StatisticsPage extends StatefulWidget {
StatisticsPage({Key key}) : super(key: key);
... ... @@ -25,36 +27,26 @@ class StatisticsPage extends StatefulWidget {
}
class _StatisticsPageState extends State<StatisticsPage> {
String dateS = "开始日期"; //开始时间
String dateE = "结束日期"; //结束时间
DateTime datetimeS; //开始时间
DateTime datetimeE; //结束时间
DateTime dateNow; //当前日期
bool showWidget = true;
StatisticsProvider _provider;
List<String> selectList;
int currentIndex = 0;
TextEditingController controller = TextEditingController();
StaticsModel tableHeaderModel;
String sortstr = '排序';
@override
void initState() {
super.initState();
tableHeaderModel = StaticsModel();
tableHeaderModel.select = true;
tableHeaderModel.numstr = '序号';
tableHeaderModel.name = '顾客姓名';
tableHeaderModel.phone = '电话';
tableHeaderModel.count = '预订次数';
datetimeS = DateTime.now();
datetimeE = datetimeS.add(Duration(days: 1));
// dateS = DateUtil.formatDate(datetimeS, format: DateFormats.y_mo_d);
// dateE = DateUtil.formatDate(datetimeE, format: DateFormats.y_mo_d);
dateNow = datetimeS;
selectList = ['预订次数多到少', '消费总金额高到低', '人均高到低'];
controller.text = '50';
WidgetsBinding.instance.addPostFrameCallback((_) {
for (int i = 0; i < 50; i++) {
StaticsModel tableHeaderModel1 = StaticsModel();
tableHeaderModel1.select = false;
tableHeaderModel1.numstr = '$i';
tableHeaderModel1.name = '某某';
tableHeaderModel1.phone = '1879097890';
tableHeaderModel1.count = '${i}次';
_provider.dataStatics.add(tableHeaderModel1);
}
_provider.notifyListeners();
});
}
_buttonChoose(String title, ClickCallback callback,
... ... @@ -144,6 +136,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
@override
Widget build(BuildContext context) {
_provider = Provider.of<StatisticsProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -151,6 +144,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
rightImgName: '清空',
onTapRight: () {
//
_provider.clear();
},
onTap: () {
Navigator.pop(context);
... ... @@ -213,7 +207,7 @@ class _StatisticsPageState extends State<StatisticsPage> {
color: MyColours.color_199095))),
child: IntrinsicWidth(
child: TextField(
controller: controller,
controller: _provider.controller,
maxLines: 1,
// inputFormatters: [
// LengthLimitingTextInputFormatter(9),
... ... @@ -257,20 +251,21 @@ class _StatisticsPageState extends State<StatisticsPage> {
],
)),
//表头
_tableItem(
tableHeaderModel, 3, TableItemType.TableItemTypeHeader),
_tableItem(model.tableHeaderModel, 3,
TableItemType.TableItemTypeHeader, (index) {
print('全选');
_provider.allSel();
}),
Expanded(
child: ListView.builder(
itemCount: 100,
itemCount: model.dataStatics.length,
itemBuilder: (BuildContext context, int index) {
StaticsModel tableHeaderModel1 = StaticsModel();
tableHeaderModel1.select = true;
tableHeaderModel1.numstr = '$index';
tableHeaderModel1.name = '某某';
tableHeaderModel1.phone = '1879097890';
tableHeaderModel1.count = '${index}次';
return _tableItem(tableHeaderModel1, index,
TableItemType.TableItemTypeBody);
return _tableItem(model.dataStatics[index], index,
TableItemType.TableItemTypeBody, (index) {
model.dataStatics[index].select =
!model.dataStatics[index].select;
model.needAllSel();
});
})),
Container(
alignment: Alignment.centerRight,
... ... @@ -288,28 +283,42 @@ class _StatisticsPageState extends State<StatisticsPage> {
color: MyColours.color_199095)),
child: Row(
children: [
Container(
width: ScreenUtil().setWidth(110 * 2),
height: ScreenUtil().setWidth(42 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(
ScreenUtil().setWidth(42)),
bottomLeft: Radius.circular(
ScreenUtil().setWidth(42))),
),
child: Text(
'发优惠券',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_199095),
)),
InkWell(
child: Container(
width: ScreenUtil().setWidth(110 * 2),
height: ScreenUtil().setWidth(42 * 2),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(
ScreenUtil().setWidth(42)),
bottomLeft: Radius.circular(
ScreenUtil().setWidth(42))),
),
child: Text(
'发优惠券',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_199095),
)),
onTap: () {
NavigatorUtil.goStatisticsSmsPage(context);
if (model.selectAny()) {
NavigatorUtil.goCouponSelectPage(context,
from: 'statistics', hasModify: false);
} else {
Utils.showToast('请选择顾客');
}
},
),
InkWell(
onTap: () {
if (model.selectAny()) {
NavigatorUtil.goStatisticsSmsPage(context);
} else {
Utils.showToast('请选择顾客');
}
},
child: Container(
width: ScreenUtil().setWidth(110 * 2),
... ... @@ -349,13 +358,15 @@ class _StatisticsPageState extends State<StatisticsPage> {
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buttonChoose(dateS, (value) {
DialogUtil.showCalendarDialog(context, datetimeS)
_buttonChoose(_provider.dateS, (value) {
DialogUtil.showCalendarDialog(
context, _provider.datetimeS)
.then((day) {
if (day != null) {
setState(() {
datetimeS = day;
dateS = DateUtil.formatDate(datetimeS,
_provider.datetimeS = day;
_provider.dateS = DateUtil.formatDate(
_provider.datetimeS,
format: DateFormats.y_mo_d);
});
}
... ... @@ -373,13 +384,15 @@ class _StatisticsPageState extends State<StatisticsPage> {
),
),
HEmptyView(10),
_buttonChoose(dateE, (value) {
DialogUtil.showCalendarDialog(context, datetimeE)
_buttonChoose(_provider.dateE, (value) {
DialogUtil.showCalendarDialog(
context, _provider.datetimeE)
.then((day) {
if (day != null) {
setState(() {
datetimeE = day;
dateE = DateUtil.formatDate(datetimeE,
_provider.datetimeE = day;
_provider.dateE = DateUtil.formatDate(
_provider.datetimeE,
format: DateFormats.y_mo_d);
});
}
... ... @@ -389,9 +402,9 @@ class _StatisticsPageState extends State<StatisticsPage> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buttonChoose(sortstr, (value) {
_buttonChoose(_provider.sortstr, (value) {
setState(() {
showWidget = !showWidget;
_provider.showWidget = !_provider.showWidget;
print('1');
});
}),
... ... @@ -402,13 +415,14 @@ class _StatisticsPageState extends State<StatisticsPage> {
child: Material(
color: Colors.transparent,
child: Offstage(
offstage: showWidget,
offstage: _provider.showWidget,
child: _selectWidget(selectList, (index) {
print(selectList[index]);
setState(() {
showWidget = !showWidget;
currentIndex = index;
sortstr = selectList[index];
_provider.showWidget =
!_provider.showWidget;
_provider.currentIndex = index;
_provider.sortstr = selectList[index];
});
}),
))),
... ... @@ -422,91 +436,89 @@ class _StatisticsPageState extends State<StatisticsPage> {
}
///表头
Widget _tableItem(StaticsModel model, int index, TableItemType type) {
return Container(
padding: EdgeInsets.only(left: ScreenUtil().setWidth(30)),
height: ScreenUtil()
.setWidth(type == TableItemType.TableItemTypeBody ? 100 : 80),
color: index % 2 == 0 ? MyColours.color_f7fdfd : MyColours.color_fefefe,
child: Row(
children: [
Container(
width: ScreenUtil().setWidth(85 * 2),
height: double.infinity,
decoration: BoxDecoration(
border: Border(
right: BorderSide(
width: ScreenUtil().setWidth(2),
color: MyColours.color_f5f5f5))),
child: Row(
children: [
Image.asset(
Utils.getImgPath(model.select ? 'select' : 'unselect'),
width: ScreenUtil().setWidth(34),
height: ScreenUtil().setWidth(34),
),
// HEmptyView(20),
Expanded(
child: Text(
model.numstr,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
)),
HEmptyView(30),
],
),
),
Container(
alignment: Alignment.center,
width: ScreenUtil().setWidth(87 * 2),
height: double.infinity,
decoration: BoxDecoration(
border: Border(
right: BorderSide(
width: ScreenUtil().setWidth(2),
color: MyColours.color_f5f5f5))),
child: Text(
model.name,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
)),
Container(
alignment: Alignment.center,
width: ScreenUtil().setWidth(116 * 2),
Widget _tableItem(
StaticsModel model, int index, TableItemType type, IntCallback callback) {
return InkWell(
onTap: () {
callback(index);
},
child: Container(
padding: EdgeInsets.only(left: ScreenUtil().setWidth(30)),
height: ScreenUtil()
.setWidth(type == TableItemType.TableItemTypeBody ? 100 : 80),
color: index % 2 == 0 ? MyColours.color_f7fdfd : MyColours.color_fefefe,
child: Row(
children: [
Container(
width: ScreenUtil().setWidth(85 * 2),
height: double.infinity,
decoration: BoxDecoration(
border: Border(
right: BorderSide(
width: ScreenUtil().setWidth(2),
color: MyColours.color_f5f5f5))),
child: Row(
children: [
Image.asset(
Utils.getImgPath(model.select ? 'select' : 'unselect'),
width: ScreenUtil().setWidth(34),
height: ScreenUtil().setWidth(34),
),
// HEmptyView(20),
Expanded(
child: Text(
model.numstr,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
)),
HEmptyView(30),
],
),
),
Container(
alignment: Alignment.center,
width: ScreenUtil().setWidth(87 * 2),
height: double.infinity,
decoration: BoxDecoration(
border: Border(
right: BorderSide(
width: ScreenUtil().setWidth(2),
color: MyColours.color_f5f5f5))),
child: Text(
model.name,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
)),
Container(
alignment: Alignment.center,
width: ScreenUtil().setWidth(116 * 2),
height: double.infinity,
decoration: BoxDecoration(
border: Border(
right: BorderSide(
width: ScreenUtil().setWidth(2),
color: MyColours.color_f5f5f5))),
child: Text(
model.phone,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
)),
Expanded(
child: Center(
child: Text(
model.phone,
model.count,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
)),
Expanded(
child: Center(
child: Text(
model.count,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_333333),
),
))
],
),
))
],
),
),
);
}
}
class StaticsModel extends Object {
bool select;
String numstr;
String name;
String phone;
String count;
}
... ...
import 'package:flutter/material.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/statics_model.dart';
class StatisticsProvider with ChangeNotifier {
PageState pageState = PageState.Success;
List<StaticsModel> dataStatics = [];
StaticsModel tableHeaderModel;
String dateS = "开始日期"; //开始时间
String dateE = "结束日期"; //结束时间
DateTime datetimeS; //开始时间
DateTime datetimeE; //结束时间
DateTime dateNow; //当前日期
bool showWidget = true;
int currentIndex = 0;
TextEditingController controller = TextEditingController();
String sortstr = '排序';
StatisticsProvider() {
tableHeaderModel = StaticsModel();
tableHeaderModel.select = false;
tableHeaderModel.numstr = '序号';
tableHeaderModel.name = '顾客姓名';
tableHeaderModel.phone = '电话';
tableHeaderModel.count = '预订次数';
datetimeS = DateTime.now();
datetimeE = datetimeS.add(Duration(days: 1));
dateNow = datetimeS;
controller.text = '50';
}
///全选按钮方法
allSel() {
if (tableHeaderModel.select) {
for (StaticsModel item in dataStatics) {
item.select = false;
}
} else {
for (StaticsModel item in dataStatics) {
item.select = true;
}
}
needAllSel();
}
///清除
clear() {
pageState = PageState.Statics;
dateS = "开始日期"; //开始时间
dateE = "结束日期"; //结束时间
sortstr = '排序';
currentIndex = 0;
controller.text = '50';
datetimeS = DateTime.now();
datetimeE = datetimeS.add(Duration(days: 1));
showWidget = true;
notifyListeners();
}
///改变全选按钮的状态
needAllSel() {
bool _needAllSel = dataStatics.every((element) => element.select == true);
if (_needAllSel) {
tableHeaderModel.select = true;
} else {
tableHeaderModel.select = false;
}
notifyListeners();
}
///收否有选中的按钮
selectAny() {
bool selectAny = dataStatics.any((element) => element.select == true);
if (selectAny) {
return true;
}
return false;
}
}
... ...
... ... @@ -187,9 +187,9 @@ class NavigatorUtil {
/// 选择优惠券
static Future<dynamic> goCouponSelectPage(BuildContext context,
{String rid, bool hasModify, replace = false}) {
{String from, bool hasModify, replace = false}) {
return _navigateTo(
context, "${Routes.coupon_select}?rid=${rid}&hasModify=${hasModify}",
context, "${Routes.coupon_select}?from=${from}&hasModify=${hasModify}",
replace: replace);
}
... ...
... ... @@ -287,9 +287,9 @@ var handleCouponEditPageHandler = new Handler(
///选择优惠券
var handleCouponSelectPageHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
String rid = params["rid"].first;
String from = params["from"].first;
bool hasModify = FluroConvertUtils.string2bool(params["hasModify"].first);
return CouponSelectPage(rid: rid, hasModify: hasModify);
return CouponSelectPage(from: from, hasModify: hasModify);
});
///优惠券详情页
... ...