|
|
|
import 'package:common_utils/common_utils.dart';
|
|
|
|
import 'package:flutter/cupertino.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/provider/user_model.dart';
|
|
|
|
import 'package:one_key/res/colors.dart';
|
|
|
|
import 'package:one_key/route/navigator_util.dart';
|
|
|
|
import 'package:one_key/utils/dialog_util.dart';
|
|
|
|
import 'package:one_key/utils/utils.dart';
|
|
|
|
import 'package:one_key/widgets/h_empty_view.dart';
|
|
|
|
import 'package:one_key/widgets/input_done_view.dart';
|
|
|
|
import 'package:one_key/widgets/page_exception.dart';
|
|
|
|
import 'package:one_key/widgets/system_app_bar.dart';
|
|
|
|
import 'package:one_key/widgets/v_empty_view.dart';
|
|
...
|
...
|
@@ -29,24 +32,127 @@ class StatisticsPage extends StatefulWidget { |
|
|
|
class _StatisticsPageState extends State<StatisticsPage> {
|
|
|
|
StatisticsProvider _provider;
|
|
|
|
List<String> selectList;
|
|
|
|
FocusNode numberFocusNode = new FocusNode();
|
|
|
|
OverlayEntry overlayEntry;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
|
|
|
|
|
|
|
selectList = ['预订次数多到少', '消费总金额高到低', '人均高到低'];
|
|
|
|
numberFocusNode.addListener(() {
|
|
|
|
if (numberFocusNode.hasFocus) {
|
|
|
|
showOverlay(context);
|
|
|
|
} else {
|
|
|
|
// _updateMoney();
|
|
|
|
removeOverlay();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
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);
|
|
|
|
// 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();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
showOverlay(BuildContext context) {
|
|
|
|
if (overlayEntry != null) return;
|
|
|
|
OverlayState overlayState = Overlay.of(context);
|
|
|
|
overlayEntry = OverlayEntry(builder: (context) {
|
|
|
|
return Positioned(
|
|
|
|
bottom: MediaQuery.of(context).viewInsets.bottom,
|
|
|
|
right: 0.0,
|
|
|
|
left: 0.0,
|
|
|
|
child: InputDoneView(
|
|
|
|
callback: () {
|
|
|
|
// _updateMoney();
|
|
|
|
_getStatisticsList();
|
|
|
|
},
|
|
|
|
));
|
|
|
|
});
|
|
|
|
|
|
|
|
overlayState.insert(overlayEntry);
|
|
|
|
}
|
|
|
|
|
|
|
|
removeOverlay() {
|
|
|
|
if (overlayEntry != null) {
|
|
|
|
overlayEntry.remove();
|
|
|
|
overlayEntry = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
///获取统计列表
|
|
|
|
_getStatisticsList() async {
|
|
|
|
if (_provider.datetimeS == null ||
|
|
|
|
_provider.datetimeE == null ||
|
|
|
|
_provider.sortstr == '排序') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_provider.datetimeE.compareTo(_provider.datetimeS) < 0) {
|
|
|
|
Utils.showToast('结束日期不能早于开始日期');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (_provider.controller.text.trim().length == 0) {
|
|
|
|
Utils.showToast('请输入数字');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
UserModel userModel = Provider.of<UserModel>(context, listen: false);
|
|
|
|
Map<String, String> params = {
|
|
|
|
"sid": userModel.user.sellerid,
|
|
|
|
"uid": userModel.user.openid,
|
|
|
|
"stime":
|
|
|
|
'${_provider.datetimeS.millisecondsSinceEpoch.toString().substring(0, 10)}',
|
|
|
|
"etime":
|
|
|
|
'${_provider.datetimeE.millisecondsSinceEpoch.toString().substring(0, 10)}',
|
|
|
|
"size": _provider.controller.text,
|
|
|
|
"od": '${_provider.currentIndex + 1}',
|
|
|
|
};
|
|
|
|
await _provider.getStatisticsList(context, params);
|
|
|
|
if (_provider.dataStatics.length > 0) {
|
|
|
|
switch (_provider.currentIndex) {
|
|
|
|
case 0: //显示预订次数
|
|
|
|
_provider.tableHeaderModel.sortstr = '预订次数';
|
|
|
|
for (int i = 0; i < _provider.dataStatics.length; i++) {
|
|
|
|
_provider.dataStatics[i].select = false;
|
|
|
|
_provider.dataStatics[i].sortstr =
|
|
|
|
_provider.dataStatics[i].cu == null
|
|
|
|
? ""
|
|
|
|
: '${_provider.dataStatics[i].cu}次';
|
|
|
|
_provider.dataStatics[i].numstr = '${i + 1}';
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1: //显示消费总金额
|
|
|
|
_provider.tableHeaderModel.sortstr = '消费总金额';
|
|
|
|
for (int i = 0; i < _provider.dataStatics.length; i++) {
|
|
|
|
_provider.dataStatics[i].select = false;
|
|
|
|
_provider.dataStatics[i].sortstr =
|
|
|
|
_provider.dataStatics[i].xiaofei == null
|
|
|
|
? ""
|
|
|
|
: '${_provider.dataStatics[i].xiaofei}元';
|
|
|
|
_provider.dataStatics[i].numstr = '${i + 1}';
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2: //显示人均
|
|
|
|
_provider.tableHeaderModel.sortstr = '人均';
|
|
|
|
for (int i = 0; i < _provider.dataStatics.length; i++) {
|
|
|
|
_provider.dataStatics[i].select = false;
|
|
|
|
_provider.dataStatics[i].sortstr =
|
|
|
|
_provider.dataStatics[i].renjun == null
|
|
|
|
? ''
|
|
|
|
: '${_provider.dataStatics[i].renjun}元';
|
|
|
|
_provider.dataStatics[i].numstr = '${i + 1}';
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
_provider.notifyListeners();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_buttonChoose(String title, ClickCallback callback,
|
|
...
|
...
|
@@ -134,11 +240,86 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
///显示50 size
|
|
|
|
Widget _sizeWidget() {
|
|
|
|
return Container(
|
|
|
|
alignment: Alignment.centerLeft,
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(40)),
|
|
|
|
color: MyColours.color_f5f5f5,
|
|
|
|
// width: double.infinity,
|
|
|
|
height: ScreenUtil().setWidth(80),
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
Text(
|
|
|
|
'显示前 ',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(26),
|
|
|
|
color: MyColours.color_333333),
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
margin:
|
|
|
|
EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(20)),
|
|
|
|
// alignment: Alignment.centerLeft,
|
|
|
|
// height: ScreenUtil().setWidth(80),
|
|
|
|
constraints:
|
|
|
|
BoxConstraints(maxWidth: ScreenUtil().setWidth(50 * 2)),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border(
|
|
|
|
bottom: BorderSide(
|
|
|
|
width: ScreenUtil().setWidth(2),
|
|
|
|
color: MyColours.color_199095))),
|
|
|
|
child: IntrinsicWidth(
|
|
|
|
child: TextField(
|
|
|
|
controller: _provider.controller,
|
|
|
|
maxLines: 1,
|
|
|
|
// inputFormatters: [
|
|
|
|
// LengthLimitingTextInputFormatter(9),
|
|
|
|
// WhitelistingTextInputFormatter.digitsOnly
|
|
|
|
// ],
|
|
|
|
|
|
|
|
// inputFormatters: [
|
|
|
|
// NumLengthInputFormatter(
|
|
|
|
// decimalLength: 2, integerLength: 6),
|
|
|
|
// ],
|
|
|
|
focusNode: numberFocusNode,
|
|
|
|
|
|
|
|
//光标颜色
|
|
|
|
cursorColor: MyColours.color_199095,
|
|
|
|
//输入文本的样式
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(26),
|
|
|
|
color: MyColours.color_199095),
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
textInputAction: TextInputAction.done,
|
|
|
|
decoration: InputDecoration(
|
|
|
|
isDense: true,
|
|
|
|
hintText: "输入",
|
|
|
|
hintStyle: TextStyle(
|
|
|
|
color: MyColours.color_999999,
|
|
|
|
fontSize: ScreenUtil().setSp(26),
|
|
|
|
),
|
|
|
|
|
|
|
|
contentPadding: EdgeInsets.zero, //ios 17
|
|
|
|
border: InputBorder.none,
|
|
|
|
),
|
|
|
|
onChanged: (value) {},
|
|
|
|
onEditingComplete: () {
|
|
|
|
FocusScope.of(context).requestFocus(FocusNode()); //隐藏键盘
|
|
|
|
_getStatisticsList();
|
|
|
|
},
|
|
|
|
keyboardType: TextInputType.numberWithOptions(decimal: true),
|
|
|
|
)))
|
|
|
|
],
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
_provider = Provider.of<StatisticsProvider>(context, listen: true);
|
|
|
|
return Scaffold(
|
|
|
|
backgroundColor: MyColours.color_ffffff,
|
|
|
|
resizeToAvoidBottomInset: false,
|
|
|
|
appBar: SystemAppBar(
|
|
|
|
'统计列表',
|
|
|
|
rightImgName: '清空',
|
|
...
|
...
|
@@ -157,12 +338,16 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
return Column(
|
|
|
|
children: [
|
|
|
|
VEmptyView(100),
|
|
|
|
model.pageState == PageState.Statics
|
|
|
|
? SizedBox()
|
|
|
|
: _sizeWidget(),
|
|
|
|
Expanded(
|
|
|
|
child: ExceptionPage(
|
|
|
|
pageState: model.pageState,
|
|
|
|
callback: () {
|
|
|
|
// offset = 0;
|
|
|
|
// getMessage(showLoading: true);
|
|
|
|
_getStatisticsList();
|
|
|
|
},
|
|
|
|
emptyMsg: model.pageState == PageState.Statics
|
|
|
|
? "请选择日期和排序条件"
|
|
...
|
...
|
@@ -177,79 +362,7 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
|
|
children: [
|
|
|
|
VEmptyView(100),
|
|
|
|
Container(
|
|
|
|
alignment: Alignment.centerLeft,
|
|
|
|
padding: EdgeInsets.symmetric(
|
|
|
|
horizontal: ScreenUtil().setWidth(40)),
|
|
|
|
color: MyColours.color_f5f5f5,
|
|
|
|
// width: double.infinity,
|
|
|
|
height: ScreenUtil().setWidth(80),
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
Text(
|
|
|
|
'显示前 ',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(26),
|
|
|
|
color: MyColours.color_333333),
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
margin: EdgeInsets.symmetric(
|
|
|
|
vertical: ScreenUtil().setWidth(20)),
|
|
|
|
// alignment: Alignment.centerLeft,
|
|
|
|
// height: ScreenUtil().setWidth(80),
|
|
|
|
constraints: BoxConstraints(
|
|
|
|
maxWidth: ScreenUtil().setWidth(50 * 2)),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border(
|
|
|
|
bottom: BorderSide(
|
|
|
|
width: ScreenUtil().setWidth(2),
|
|
|
|
color: MyColours.color_199095))),
|
|
|
|
child: IntrinsicWidth(
|
|
|
|
child: TextField(
|
|
|
|
controller: _provider.controller,
|
|
|
|
maxLines: 1,
|
|
|
|
// inputFormatters: [
|
|
|
|
// LengthLimitingTextInputFormatter(9),
|
|
|
|
// WhitelistingTextInputFormatter.digitsOnly
|
|
|
|
// ],
|
|
|
|
|
|
|
|
// inputFormatters: [
|
|
|
|
// NumLengthInputFormatter(
|
|
|
|
// decimalLength: 2, integerLength: 6),
|
|
|
|
// ],
|
|
|
|
// focusNode: numberFocusNode,
|
|
|
|
|
|
|
|
//光标颜色
|
|
|
|
cursorColor: MyColours.color_199095,
|
|
|
|
//输入文本的样式
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(26),
|
|
|
|
color: MyColours.color_199095),
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
textInputAction: TextInputAction.done,
|
|
|
|
decoration: InputDecoration(
|
|
|
|
isDense: true,
|
|
|
|
hintText: "输入",
|
|
|
|
hintStyle: TextStyle(
|
|
|
|
color: MyColours.color_999999,
|
|
|
|
fontSize: ScreenUtil().setSp(26),
|
|
|
|
),
|
|
|
|
|
|
|
|
contentPadding: EdgeInsets.zero, //ios 17
|
|
|
|
border: InputBorder.none,
|
|
|
|
),
|
|
|
|
onChanged: (value) {},
|
|
|
|
onEditingComplete: () {
|
|
|
|
FocusScope.of(context)
|
|
|
|
.requestFocus(FocusNode()); //隐藏键盘
|
|
|
|
// _updateMoney();
|
|
|
|
},
|
|
|
|
keyboardType: TextInputType.numberWithOptions(
|
|
|
|
decimal: true),
|
|
|
|
)))
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
_sizeWidget(),
|
|
|
|
//表头
|
|
|
|
_tableItem(model.tableHeaderModel, 3,
|
|
|
|
TableItemType.TableItemTypeHeader, (index) {
|
|
...
|
...
|
@@ -369,6 +482,7 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
_provider.datetimeS,
|
|
|
|
format: DateFormats.y_mo_d);
|
|
|
|
});
|
|
|
|
_getStatisticsList();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, timeType: TimeType.TimeTypeStart),
|
|
...
|
...
|
@@ -395,6 +509,7 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
_provider.datetimeE,
|
|
|
|
format: DateFormats.y_mo_d);
|
|
|
|
});
|
|
|
|
_getStatisticsList();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, timeType: TimeType.TimeTypeEnd),
|
|
...
|
...
|
@@ -405,7 +520,6 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
_buttonChoose(_provider.sortstr, (value) {
|
|
|
|
setState(() {
|
|
|
|
_provider.showWidget = !_provider.showWidget;
|
|
|
|
print('1');
|
|
|
|
});
|
|
|
|
}),
|
|
|
|
VEmptyView(10),
|
|
...
|
...
|
@@ -424,6 +538,7 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
_provider.currentIndex = index;
|
|
|
|
_provider.sortstr = selectList[index];
|
|
|
|
});
|
|
|
|
_getStatisticsList();
|
|
|
|
}),
|
|
|
|
))),
|
|
|
|
])
|
|
...
|
...
|
@@ -436,8 +551,8 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
}
|
|
|
|
|
|
|
|
///表头
|
|
|
|
Widget _tableItem(
|
|
|
|
StaticsModel model, int index, TableItemType type, IntCallback callback) {
|
|
|
|
Widget _tableItem(StaticsSunModel model, int index, TableItemType type,
|
|
|
|
IntCallback callback) {
|
|
|
|
return InkWell(
|
|
|
|
onTap: () {
|
|
|
|
callback(index);
|
|
...
|
...
|
@@ -487,7 +602,7 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
width: ScreenUtil().setWidth(2),
|
|
|
|
color: MyColours.color_f5f5f5))),
|
|
|
|
child: Text(
|
|
|
|
model.name,
|
|
|
|
model.rname,
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(28),
|
|
|
|
color: MyColours.color_333333),
|
|
...
|
...
|
@@ -510,7 +625,7 @@ class _StatisticsPageState extends State<StatisticsPage> { |
|
|
|
Expanded(
|
|
|
|
child: Center(
|
|
|
|
child: Text(
|
|
|
|
model.count,
|
|
|
|
model.sortstr,
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(28),
|
|
|
|
color: MyColours.color_333333),
|
...
|
...
|
|