Commit 7391be56de340534e262ec12c87c6ed146066781

Authored by wdn127929
1 parent 8fbb8d70

UI+菜品接口

import 'package:flutter/material.dart';
import 'package:one_key/models/cookbook_model.dart';
import 'package:one_key/provider/plan_dish_provider.dart';
import 'package:one_key/utils/screen_util.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../../../constant/state.dart';
import '../../../res/colors.dart';
import '../../../route/navigator_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/round_button.dart';
import '../../provider/user_model.dart';
const scrollDuration = Duration(microseconds: 500);
class OrderAdvanceEidtPage extends StatefulWidget {
OrderAdvanceEidtPage({
Key key,
}) : super(key: key);
@override
_OrderAdvanceEidtPageState createState() => _OrderAdvanceEidtPageState();
}
class _OrderAdvanceEidtPageState extends State<OrderAdvanceEidtPage> {
int _selectIndex = 0;
int min;
int max;
bool isTap = false;
final ItemScrollController itemScrollController = ItemScrollController();
final ItemPositionsListener itemPositionsListener =
ItemPositionsListener.create();
PlanDishProvider _planDishProvider;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getCookbookByClass(showLoading: false);
});
}
_getCookbookByClass({bool showLoading = true}) async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
};
await _planDishProvider.getCookbookByClass(context, params,
showLoading: showLoading);
}
///接口
_getMenuData() {
// Map<String, dynamic> params = {"sellerid": int.parse(widget.sellerID)};
// _storeMenuProvider.getStoreMenu(context, params);
}
Widget list(List data) => ScrollablePositionedList.builder(
// itemCount: data.length,
itemCount: 10,
itemBuilder: (context, index) => item(index),
itemScrollController: itemScrollController,
itemPositionsListener: itemPositionsListener,
reverse: false,
scrollDirection: Axis.vertical,
);
void scrollTo(int index) => itemScrollController.scrollTo(
index: index,
duration: scrollDuration,
curve: Curves.easeInOutCubic,
alignment: 0);
void jumpTo(int index) =>
itemScrollController.jumpTo(index: index, alignment: 0);
/// Generate item number [i].
Widget item(int i) {
return ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: 100,
itemBuilder: (BuildContext context, int index) {
return Container(
width: 200,
height: 200,
color: Colors.red,
);
});
// return Container(
// // height: ScreenUtil().setWidth(110 * 2) *
// // _storeMenuProvider.menulist[i].cookbooklist.length +
// // ScreenUtil().setWidth(60 * 2),
// height: ScreenUtil().setWidth(110 * 2) * 100 +
// ScreenUtil().setWidth(60 * 2),
// child: Column(
// children: [
// Container(
// alignment: Alignment.centerLeft,
// height: ScreenUtil().setWidth(60 * 2),
// child: Text('热菜',
// style: TextStyle(
// fontSize: ScreenUtil().setWidth(30),
// color: MyColours.color_666666)),
// ),
// Container(
// height: ScreenUtil().setWidth(110 * 2) * 100,
// child: ListView.builder(
// shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(),
// itemCount: 100,
// itemBuilder: (BuildContext context, int index) {
// return Container();
// })),
// ],
// ));
}
Widget _laduWidget() {
// if (labelIcon[widget
// .cookBookList.labelList[index].icon] is int) {
// int ladu = labelIcon[
// widget.cookBookList.labelList[index].icon];
int ladu = 3;
List<Widget> widgetList = [];
for (var i = 0; i < ladu; i++) {
widgetList.add(Image.asset(
Utils.getImgPath('ladu'),
width: w(10),
));
}
// widgetList.add(HEmptyView(10));
return Row(
children: widgetList,
);
// }else{
// return SizedBox();
// }
}
@override
Widget build(BuildContext context) {
_planDishProvider = Provider.of<PlanDishProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar('经理排菜'),
body: Consumer<PlanDishProvider>(builder: (context, model, child) {
if (model.pageState == PageState.Success) {
return Column(
children: [
MyDivider(
double.infinity,
ScreenUtil().setWidth(1),
color: MyColours.color_DBDBDB,
),
Expanded(
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ValueListenableBuilder<Iterable<ItemPosition>>(
valueListenable: itemPositionsListener.itemPositions,
builder: (context, positions, child) {
// if (positions.isNotEmpty) {
// // max = positions
// // .where((ItemPosition position) =>
// // position.itemLeadingEdge < 1)
// // .reduce((ItemPosition max,
// // ItemPosition position) =>
// // position.itemLeadingEdge >
// // max.itemLeadingEdge
// // ? position
// // : max)
// // .index;
// min = positions
// .where((ItemPosition position) =>
// position.itemTrailingEdge > 0)
// .reduce((ItemPosition min,
// ItemPosition position) =>
// position.itemTrailingEdge <
// min.itemTrailingEdge
// ? position
// : min)
// .index;
// if (isTap) {
// if (min >= _selectIndex) {
// _selectIndex = min;
// } else {
// _selectIndex = _selectIndex;
// }
// isTap = false;
// } else {
// _selectIndex = min;
// }
// }
return Container(
height: double.infinity,
color: MyColours.color_F9F9F9,
width: ScreenUtil().setWidth(85 * 2),
child: ListView.builder(
// itemCount:
// _storeMenuProvider.menulist.length,
itemCount:
_planDishProvider.menuModel.length,
itemBuilder:
(BuildContext context, int index) {
return InkWell(
onTap: () {
isTap = true;
// scrollTo(index);
setState(() {
_selectIndex = index;
});
},
child: Stack(
children: [
Container(
height:
ScreenUtil().setWidth(60 * 2),
decoration: BoxDecoration(
color: _selectIndex == index
? MyColours.color_DBDBDB
: MyColours.color_ffffff,
border: Border(
right: BorderSide(
width: w(1),
color: MyColours
.color_DBDBDB),
bottom: BorderSide(
width: w(1),
color: MyColours
.color_DBDBDB))),
alignment: Alignment.center,
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(30),
vertical: ScreenUtil()
.setWidth(20)),
child: Text(
// _storeMenuProvider
// .menulist[index].className,
_planDishProvider
.menuModel[index].className,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize:
ScreenUtil().setSp(28),
color: _selectIndex == index
? MyColours.color_333333
: MyColours
.color_999999),
),
),
Positioned(
top: w(2),
right: w(2),
child: Container(
// width: w(16),
constraints: BoxConstraints(
minWidth: w(16)),
height: w(16),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
r(8)),
color: MyColours
.color_E34D59),
child: Text(
'23',
style: TextStyle(
fontSize: font(10),
color: MyColours
.color_F6F6F6),
),
))
],
),
);
}));
}),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(horizontal: w(10)),
// width: ScreenUtil().setWidth(290 * 2),
child: ListView.builder(
shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(),
itemCount: _planDishProvider
.menuModel[_selectIndex]
.cookbooklist
.length,
itemBuilder:
(BuildContext context, int index) {
MenuSunModel menuSunModel =
_planDishProvider
.menuModel[_selectIndex]
.cookbooklist[index];
return Container(
padding:
EdgeInsets.symmetric(vertical: w(16)),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: MyColours.color_DBDBDB,
width: w(1)))),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
constraints:
BoxConstraints(
maxWidth: w(100)),
child: Text(
menuSunModel.name,
maxLines: 10,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
fontSize: font(16),
fontWeight:
FontWeight.bold,
color: MyColours
.color_515151),
)),
HEmptyView(8),
_laduWidget()
],
),
VEmptyView(24),
Row(
children: [
Text(
'${menuSunModel.price}元/${menuSunModel.unit}',
style: TextStyle(
fontSize: font(12),
color: MyColours
.color_999999),
),
Text(
'${menuSunModel.member_price}元/${menuSunModel.unit}',
style: TextStyle(
fontSize: font(10),
color: MyColours
.color_8EBBBE),
),
],
)
],
)),
// Spacer(),
Image.asset(
Utils.getImgPath('plan_dish_minus'),
width: w(16),
),
HEmptyView(8),
Container(
width: w(32),
height: w(16),
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
r(5)),
border: Border.all(
width: w(1),
color: MyColours
.color_999999)),
// constraints: BoxConstraints(minWidth: w(20)),
child: TextField(
maxLines: 1,
// controller:
// focusNode: _focusNode,
// autofocus: true,
style: TextStyle(
color:
MyColours.color_438E93,
fontSize: font(12)),
textAlign: TextAlign.center,
// textAlignVertical: TextAlignVertical.center,
decoration: InputDecoration(
hintText: "人数",
hintStyle: TextStyle(
color:
MyColours.color_999999,
fontSize: font(12),
),
// isCollapsed:
// true, //重点,相当于高度包裹的意思,必须设置为true,不然有默认奇妙的最小高度
border: OutlineInputBorder(
borderSide:
BorderSide.none),
contentPadding:
EdgeInsets.zero,
),
keyboardType:
TextInputType.number,
textInputAction:
TextInputAction.done,
onChanged: (value) {
// setState(() {});
// _searchSellerLocation();
// customerProvider.searchData(value);
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(
FocusNode()); //点击空白处隐藏键盘
// contantShowModel.searchData(
// contantShowModel.controller.text);
// _searchSellerLocation();
// _focusNode.unfocus();
},
)),
HEmptyView(8),
Image.asset(
Utils.getImgPath('plan_dish_add'),
width: w(16),
),
],
),
);
})))
],
),
),
Container(
decoration: BoxDecoration(
border: Border(
top: BorderSide(
width: w(1), color: MyColours.color_DBDBDB))),
padding:
EdgeInsets.symmetric(horizontal: w(20), vertical: w(15)),
child: Row(
children: [
Stack(
clipBehavior: Clip.none,
children: [
Image.asset(
Utils.getImgPath('plan_dish_car'),
width: w(35),
),
Positioned(
top: w(-3),
right: w(-4),
child: Container(
// width: w(16),
constraints: BoxConstraints(minWidth: w(16)),
height: w(16),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(8)),
color: MyColours.color_E34D59),
child: Text(
'23',
style: TextStyle(
fontSize: font(10),
color: MyColours.color_F6F6F6),
),
))
],
),
HEmptyView(66),
Expanded(
child: Column(
children: [
Row(
children: [
Text(
'总计:',
style: TextStyle(
fontSize: font(12),
color: MyColours.color_515151),
),
Text(
'0.00',
style: TextStyle(
fontSize: font(12),
color: MyColours.color_000000),
),
Text(
'元',
style: TextStyle(
fontSize: font(12),
color: MyColours.color_515151),
),
],
),
VEmptyView(20),
Row(
children: [
Text(
'会员价:',
style: TextStyle(
fontSize: font(12),
color: MyColours.color_515151),
),
Text(
'0.00',
style: TextStyle(
fontSize: font(12),
color: MyColours.color_000000),
),
Text(
'元',
style: TextStyle(
fontSize: font(12),
color: MyColours.color_515151),
),
],
)
],
)),
HEmptyView(10),
Text(
'排菜价:',
style: TextStyle(
fontSize: font(12), color: MyColours.color_515151),
),
Container(
width: w(65),
height: w(30),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(5)),
border: Border.all(
color: MyColours.color_515151, width: w(1))),
// constraints: BoxConstraints(minWidth: w(20)),
child: TextField(
maxLines: 1,
// controller:
// focusNode: _focusNode,
// autofocus: true,
style: TextStyle(
color: MyColours.color_000000,
fontSize: font(12)),
textAlign: TextAlign.center,
// textAlignVertical: TextAlignVertical.center,
decoration: InputDecoration(
hintText: "0.00",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: font(12),
),
// isCollapsed:
// true, //重点,相当于高度包裹的意思,必须设置为true,不然有默认奇妙的最小高度
border: OutlineInputBorder(
borderSide: BorderSide.none),
contentPadding: EdgeInsets.zero,
),
keyboardType: TextInputType.number,
textInputAction: TextInputAction.done,
onChanged: (value) {
// setState(() {});
// _searchSellerLocation();
// customerProvider.searchData(value);
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
// contantShowModel.searchData(
// contantShowModel.controller.text);
// _searchSellerLocation();
// _focusNode.unfocus();
},
)),
Text(
'元',
style: TextStyle(
fontSize: font(12), color: MyColours.color_515151),
),
],
),
),
Container(
color: MyColours.color_FAFAFA,
padding: EdgeInsets.only(
top: w(12), bottom: w(25), left: w(20), right: w(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RoundButton(
text: '排菜编辑',
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
width: w(100),
height: w(43),
radius: r(5),
fontSize: 32,
isBold: false,
borderColor: MyColours.color_438E93,
textColor: MyColours.color_438E93,
onPressed: () {
// NavigatorUtil.goFinalPlanDishPage(context);
},
),
RoundButton(
text: '生成预览',
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
width: w(100),
height: w(43),
radius: r(5),
fontSize: 32,
borderColor: MyColours.color_438E93,
textColor: MyColours.color_438E93,
isBold: false,
onPressed: () {
// NavigatorUtil.goFinalPlanDishPage(context);
},
),
RoundButton(
text: '提交',
gradientStart: MyColours.color_438E93,
gradientEnd: MyColours.color_438E93,
width: w(100),
height: w(43),
radius: r(5),
fontSize: 36,
isBold: false,
onPressed: () {
// NavigatorUtil.goFinalPlanDishPage(context);
},
)
],
))
],
);
} else {
return ExceptionPage(
pageState: model.pageState,
emptyMsg: '暂时没有菜单哦',
callback: () {
_getCookbookByClass();
},
);
}
}));
}
}
... ...
... ... @@ -339,9 +339,11 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
VEmptyView(32),
_textMulLine('喜好', '点这里输入客户喜好的东西,请用逗号隔开。', likeController),
VEmptyView(20),
_textMulLine('忌口', '点这里输入客户忌口的东西,请用逗号隔开。', noFoodController),
_textMulLine(
'忌口', '点这里输入客户忌口的东西,请用逗号隔开。', noFoodController),
VEmptyView(20),
_textMulLine('服务', '点这里输入客户需要的服务,如安静的包间、远离厕所等,请用逗号隔开。', serviceController),
_textMulLine('服务', '点这里输入客户需要的服务,如安静的包间、远离厕所等,请用逗号隔开。',
serviceController),
],
),
),
... ... @@ -392,11 +394,9 @@ class _OrderAdvanceHomePageState extends State<OrderAdvanceHomePage> {
flex: 2,
child: InkWell(
onTap: () {
// NavigatorUtil
// .goInvicationPage(
// context,
// detailEntity.id,
// );
NavigatorUtil.goOrderAdvanceEditPage(
context,
);
},
child: Container(
decoration: BoxDecoration(
... ...
import 'package:flutter/material.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/utils/utils.dart';
import '../constant/constant.dart';
import '../constant/error.dart';
import '../models/cookbook_model.dart';
import '../net/http_url.dart';
/**
* 预排菜
*/
class PlanDishProvider extends ChangeNotifier {
PageState pageState = PageState.Success;
PageState pageState = PageState.Loading;
List<MenuModel> menuModel; //菜品数据
// List<CookbookCategorySunModel> categorySunModel; //菜品分类数据
// List<CookbookSpecSunModel> specSunModel; //计价单位
// CookbookOneSunModel cookbookOneSunModel;
///分类下所有菜品列表(1.传orderid顾客端获取带订单信息的 否则不传
getCookbookByClass(BuildContext context, Map<String, String> params,
{showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_cookbook_by_class,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
case 1:
pageState = PageState.ConnectivityError;
break;
case 2:
pageState = PageState.ConnectivityTimeOut;
break;
default:
pageState = PageState.ConnectivityError;
break;
}
}
notifyListeners();
});
menuModel = [];
if (baseResp != null && baseResp.code == Constant.status_success) {
if (baseResp.data[0]['list'] == '') {
pageState = PageState.Empty;
} else {
List menu = baseResp.data[0]['list'];
for (int i = 0; i < menu.length; i++) {
menuModel.add(MenuModel.fromJson(menu[i]));
}
print(menuModel);
pageState = PageState.Success;
}
} else {
Utils.showToast(baseResp.msg ?? "");
pageState = PageState.ConnectivityError;
}
notifyListeners();
}
}
... ...
... ... @@ -1224,4 +1224,23 @@ class NavigatorUtil {
return _navigateTo(context, "${Routes.order_advance_home_page}",
replace: replace);
}
///经理排菜-编辑
static Future<dynamic> goOrderAdvanceEditPage(
BuildContext context, {
replace = false,
}) {
// if (invoice != null) {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?invoice=${FluroConvertUtils.object2string(invoice)}",
// replace: replace);
// }
// if (object != null) {
// return _navigateTo(context,
// "${Routes.order_advance_home_page}?tids=$tids&tableidNow=$tableidNow&fromPage=$fromPage&canChoose=$canChoose&object=${FluroConvertUtils.object2string(object)}");
// }
return _navigateTo(context, "${Routes.order_advance_edit_page}",
replace: replace);
}
}
... ...
... ... @@ -115,6 +115,7 @@ import 'package:one_key/pages/notebook/statistics_sms_page.dart';
import 'package:one_key/pages/online_check/invoice_detail_page.dart';
import 'package:one_key/pages/online_check/online_check_detail_page.dart';
import 'package:one_key/pages/online_check/online_check_edit_page.dart';
import 'package:one_key/pages/order_advance/order_advance_eidt_page.dart';
import 'package:one_key/pages/sms/sms_page.dart';
import 'package:one_key/pages/table/select_table_page.dart';
import 'package:one_key/pages/my/photo_type/table_photo_manager_page.dart';
... ... @@ -1933,3 +1934,24 @@ var orderAdvanceHomePageHandle = new Handler(
return ChangeNotifierProvider<PlanDishProvider>(
create: (_) => PlanDishProvider(), child: OrderAdvanceHomePage());
});
///经理排菜---编辑
var orderAdvanceEidtPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String fromPage = params["fromPage"].first;
// String tids = params["tids"].first;
// String tableidNow = params["tableidNow"].first;
// bool canChoose = params["canChoose"].first == "true" ? true : false;
// List<TableList> res = [];
// if (params.keys.contains('object')) {
// Map object = FluroConvertUtils.string2map(params["object"].first);
// List temp = object['object'];
// for (var item in temp) {
// res.add(TableList.fromJson(item));
// }
// }
return ChangeNotifierProvider<PlanDishProvider>(
create: (_) => PlanDishProvider(), child: OrderAdvanceEidtPage());
});
... ...
... ... @@ -174,6 +174,8 @@ class Routes {
* 经理排菜
*/
static String order_advance_home_page = "/order_advance_home_page"; //经理预点菜首页
static String order_advance_edit_page = "/order_advance_edit_page"; //经理预点菜编辑
static void configureRoutes(FluroRouter router) {
router.notFoundHandler = new Handler(
... ... @@ -340,6 +342,9 @@ class Routes {
router.define(plan_new_dish_page, handler: planNewDishPageHandle);
router.define(final_plan_dish_page, handler: finalPlanDishPageHandle);
router.define(order_advance_home_page, handler: orderAdvanceHomePageHandle);
router.define(order_advance_edit_page, handler: orderAdvanceEidtPageHandle);
}
}
... ...