|
|
|
import 'dart:convert';
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
|
import 'package:one_key/models/get_setmeal_class_by_id_model.dart';
|
|
|
|
import 'package:one_key/models/setmeal_by_id_model.dart';
|
|
|
|
import 'package:one_key/models/setmeal_model.dart';
|
|
|
|
import 'package:one_key/widgets/MyDivider.dart';
|
|
|
|
import 'package:one_key/widgets/h_empty_view.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
import '../../constant/state.dart';
|
|
|
|
import '../../models/feast_menu_set_model.dart';
|
|
|
|
import '../../provider/feast_model.dart';
|
|
|
|
import '../../res/colors.dart';
|
|
|
|
import '../../utils/screen_util.dart';
|
|
|
|
import '../../utils/utils.dart';
|
|
|
|
import '../../widgets/page_exception.dart';
|
|
|
|
import '../../widgets/system_app_bar.dart';
|
|
|
|
import '../../widgets/v_empty_view.dart';
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* 菜单信息
|
|
|
|
*/
|
|
|
|
class FeastMenuShowPage extends StatefulWidget {
|
|
|
|
final String setmealId;
|
|
|
|
final String mealName;
|
|
|
|
final String dateData;
|
|
|
|
final String needtable;
|
|
|
|
|
|
|
|
final Map<String, List<CookByIdSetmeal>> justSelData;
|
|
|
|
FeastMenuShowPage(
|
|
|
|
{Key key,
|
|
|
|
this.setmealId,
|
|
|
|
this.mealName,
|
|
|
|
this.dateData,
|
|
|
|
this.needtable,
|
|
|
|
this.justSelData})
|
|
|
|
: super(key: key);
|
|
|
|
|
|
|
|
@override
|
|
|
|
_FeastMenuShowPageState createState() => _FeastMenuShowPageState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _FeastMenuShowPageState extends State<FeastMenuShowPage> {
|
|
|
|
ScrollController controller = ScrollController();
|
|
|
|
FeastModel feastModel;
|
|
|
|
Map<String, List<CookByIdSetmeal>> data = {};
|
|
|
|
List<String> classNames = [];
|
|
|
|
List<Map<String, String>> setModel = [];
|
|
|
|
|
|
|
|
Map<String, List<CookByIdSetmeal>> dataNew = {};
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
// TODO: implement initState
|
|
|
|
super.initState();
|
|
|
|
|
|
|
|
Utils.changeStatusColor(color: MyColours.color_438E93);
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
|
|
_getSetmealById();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 根据ID获取宴会套餐
|
|
|
|
_getSetmealById({bool isShowLoading = true}) async {
|
|
|
|
Map<String, String> params = {"id": widget.setmealId};
|
|
|
|
bool success = await feastModel.getSetmealById(context, params,
|
|
|
|
isShowLoading: isShowLoading);
|
|
|
|
if (success) {
|
|
|
|
if (widget.justSelData.length > 0) {
|
|
|
|
data = widget.justSelData;
|
|
|
|
data.forEach((key, value) {
|
|
|
|
classNames.add(key);
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
for (ClassifyById item in feastModel.setmealDetail.classify) {
|
|
|
|
// Map<String, List<CookByIdSetmeal>> map = {};
|
|
|
|
String cid = item.id;
|
|
|
|
String className = item.className;
|
|
|
|
|
|
|
|
List<CookByIdSetmeal> temp = [];
|
|
|
|
for (CookByIdSetmeal itemCook in feastModel.setmealDetail.cook) {
|
|
|
|
if (cid == itemCook.cid) {
|
|
|
|
temp.add(itemCook);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
classNames.add(className);
|
|
|
|
data[className] = temp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
feastModel.pageStateMenu = PageState.Success;
|
|
|
|
setState(() {});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Widget _callButton(
|
|
|
|
{GestureTapCallback onPress,
|
|
|
|
content,
|
|
|
|
hasLeftBorder = true,
|
|
|
|
isSelect = false}) {
|
|
|
|
return InkWell(
|
|
|
|
onTap: onPress,
|
|
|
|
child: Container(
|
|
|
|
height: h(48),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: isSelect ? MyColours.color_438E93 : MyColours.color_ffffff,
|
|
|
|
border: Border(
|
|
|
|
bottom: BorderSide(
|
|
|
|
color: MyColours.color_438E93,
|
|
|
|
width: ScreenUtil().setWidth(2)),
|
|
|
|
top: BorderSide(
|
|
|
|
color: MyColours.color_438E93,
|
|
|
|
width: ScreenUtil().setWidth(2)),
|
|
|
|
left: hasLeftBorder
|
|
|
|
? BorderSide(
|
|
|
|
color: MyColours.color_438E93,
|
|
|
|
width: ScreenUtil().setWidth(2))
|
|
|
|
: BorderSide.none,
|
|
|
|
right: BorderSide(
|
|
|
|
color: MyColours.color_438E93,
|
|
|
|
width: ScreenUtil().setWidth(2)))),
|
|
|
|
child: Align(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
child: Text(
|
|
|
|
content,
|
|
|
|
style: TextStyle(
|
|
|
|
color:
|
|
|
|
isSelect ? MyColours.color_F6F6F6 : MyColours.color_438E93,
|
|
|
|
fontSize: ScreenUtil().setSp(36)),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 根据index展示不同的widget
|
|
|
|
Widget buildItemWidget(BuildContext context, int index) {
|
|
|
|
return _itemBuildWidget(context, index);
|
|
|
|
}
|
|
|
|
|
|
|
|
///输入框
|
|
|
|
Widget _textfield(String hintText, TextEditingController editingController,
|
|
|
|
FocusNode focusNode,
|
|
|
|
{TextInputType inputType = TextInputType.text, double width}) {
|
|
|
|
return Container(
|
|
|
|
width: width,
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: w(6)),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(width: h(1), color: MyColours.color_DBDBDB)),
|
|
|
|
child: Container(
|
|
|
|
// height: ScreenUtil().setHeight(120),
|
|
|
|
height: ScreenUtil().setWidth(64),
|
|
|
|
child: TextField(
|
|
|
|
controller: editingController,
|
|
|
|
// textAlign: TextAlign.right,
|
|
|
|
// textAlignVertical: TextAlignVertical.bottom,
|
|
|
|
maxLines: 1,
|
|
|
|
inputFormatters: [],
|
|
|
|
|
|
|
|
// //光标颜色
|
|
|
|
// cursorColor:
|
|
|
|
// widget.isSelect ? Colors.white : MyColours.color_199095,
|
|
|
|
//输入文本的样式
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(32),
|
|
|
|
),
|
|
|
|
focusNode: focusNode,
|
|
|
|
decoration: InputDecoration(
|
|
|
|
border: OutlineInputBorder(borderSide: BorderSide.none),
|
|
|
|
hintText: hintText,
|
|
|
|
hintStyle: TextStyle(
|
|
|
|
color: hintText == '菜名' || hintText == '数量'
|
|
|
|
? MyColours.color_999999
|
|
|
|
: MyColours.color_515151,
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
),
|
|
|
|
contentPadding: EdgeInsets.zero,
|
|
|
|
),
|
|
|
|
onChanged: (value) {},
|
|
|
|
onEditingComplete: () {
|
|
|
|
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
|
|
|
|
},
|
|
|
|
keyboardType: inputType,
|
|
|
|
)),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Widget _itemBuildWidget(BuildContext context, int index1) {
|
|
|
|
List<CookByIdSetmeal> cookList = data[classNames[index1]];
|
|
|
|
return ListView.builder(
|
|
|
|
shrinkWrap: true,
|
|
|
|
controller: controller,
|
|
|
|
// padding: EdgeInsets.only(right: w(12)),
|
|
|
|
itemCount: cookList.length + 1,
|
|
|
|
itemBuilder: (BuildContext context, int index) {
|
|
|
|
if (index < 1) {
|
|
|
|
return _buildHeaderWidget(context, classNames[index1]);
|
|
|
|
} else {
|
|
|
|
int itemIndex = index - 1;
|
|
|
|
CookByIdSetmeal setmeal = cookList[itemIndex];
|
|
|
|
|
|
|
|
return Container(
|
|
|
|
margin: new EdgeInsets.only(bottom: h(12)),
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
child: new GestureDetector(
|
|
|
|
onTap: () {
|
|
|
|
// _gotoProjectDetail(projectModelList[index]);
|
|
|
|
},
|
|
|
|
child: new Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
Container(
|
|
|
|
width: h(119),
|
|
|
|
child: Text(
|
|
|
|
setmeal.cname,
|
|
|
|
overflow: TextOverflow.ellipsis,
|
|
|
|
maxLines: 10,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_515151,
|
|
|
|
fontSize: ScreenUtil().setSp(32)),
|
|
|
|
)),
|
|
|
|
HEmptyView(16),
|
|
|
|
Container(
|
|
|
|
width: h(36),
|
|
|
|
child: Text(
|
|
|
|
'${setmeal.spec}',
|
|
|
|
overflow: TextOverflow.ellipsis,
|
|
|
|
maxLines: 1,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_515151,
|
|
|
|
fontSize: ScreenUtil().setSp(32)),
|
|
|
|
)),
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// // 总count数
|
|
|
|
// int _getItemListCount() {
|
|
|
|
// return data.length + 1;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// header内容
|
|
|
|
Widget _buildHeaderWidget(BuildContext context, String title) {
|
|
|
|
return Padding(
|
|
|
|
padding: EdgeInsets.only(bottom: h(12)),
|
|
|
|
child: Text(
|
|
|
|
title,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_515151,
|
|
|
|
fontSize: font(16),
|
|
|
|
fontWeight: FontWeight.bold),
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
feastModel = Provider.of(context);
|
|
|
|
return Scaffold(
|
|
|
|
backgroundColor: MyColours.color_ffffff,
|
|
|
|
appBar: SystemAppBar(
|
|
|
|
'查看菜单',
|
|
|
|
needWhite: true,
|
|
|
|
bgColor: MyColours.color_438E93,
|
|
|
|
titleColor: MyColours.color_F6F6F6,
|
|
|
|
onTap: () {
|
|
|
|
Navigator.pop(context);
|
|
|
|
},
|
|
|
|
),
|
|
|
|
body: Consumer<FeastModel>(builder: (context, model, _) {
|
|
|
|
if (model.pageStateMenu != PageState.Success) {
|
|
|
|
return ExceptionPage(
|
|
|
|
pageState: model.pageStateMenu,
|
|
|
|
callback: () {
|
|
|
|
_getSetmealById();
|
|
|
|
},
|
|
|
|
emptyMsg: "暂时没有菜单信息哦",
|
|
|
|
emptyImg: "empty_search",
|
|
|
|
showMsg: "加载中,请稍后...",
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
return SingleChildScrollView(
|
|
|
|
controller: controller,
|
|
|
|
child: Padding(
|
|
|
|
padding: EdgeInsets.only(left: w(16)),
|
|
|
|
child: Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
VEmptyView(20),
|
|
|
|
Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: h(48),
|
|
|
|
alignment: Alignment.centerLeft,
|
|
|
|
child: Text(
|
|
|
|
widget.mealName,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_E6000000,
|
|
|
|
fontSize: font(16)),
|
|
|
|
),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border(
|
|
|
|
bottom: BorderSide(
|
|
|
|
width: h(0.5),
|
|
|
|
color: MyColours.color_E7E7E7))),
|
|
|
|
),
|
|
|
|
VEmptyView(22),
|
|
|
|
Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: h(48),
|
|
|
|
alignment: Alignment.centerLeft,
|
|
|
|
child: Text(
|
|
|
|
widget.dateData,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_E6000000,
|
|
|
|
fontSize: font(16)),
|
|
|
|
),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border(
|
|
|
|
bottom: BorderSide(
|
|
|
|
width: h(0.5),
|
|
|
|
color: MyColours.color_E7E7E7))),
|
|
|
|
),
|
|
|
|
widget.needtable.isEmpty ? SizedBox() : VEmptyView(22),
|
|
|
|
widget.needtable.isEmpty
|
|
|
|
? SizedBox()
|
|
|
|
: Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: h(48),
|
|
|
|
child: Text(
|
|
|
|
widget.needtable,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_E6000000,
|
|
|
|
fontSize: font(16)),
|
|
|
|
),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border(
|
|
|
|
bottom: BorderSide(
|
|
|
|
width: h(0.5),
|
|
|
|
color: MyColours.color_E7E7E7))),
|
|
|
|
),
|
|
|
|
VEmptyView(36),
|
|
|
|
ListView.builder(
|
|
|
|
shrinkWrap: true,
|
|
|
|
controller: controller,
|
|
|
|
padding: EdgeInsets.only(right: w(12)),
|
|
|
|
itemCount: data.length,
|
|
|
|
itemBuilder: (BuildContext context, int index) {
|
|
|
|
return buildItemWidget(context, index);
|
|
|
|
},
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|