feast_menu_page.dart 14.5 KB
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 FeastMenuPage extends StatefulWidget {
  final String setmealId;
  final Map<String, List<Cook>> justSelData;
  FeastMenuPage({Key key, this.setmealId, this.justSelData}) : super(key: key);

  @override
  _FeastMenuPageState createState() => _FeastMenuPageState();
}

class _FeastMenuPageState extends State<FeastMenuPage> {
  ScrollController controller = ScrollController();
  FeastModel feastModel;
  Map<String, List<Cook>> data = {};
  List<String> classNames = [];
  List<Map<String, String>> setModel = [];

  Map<String, List<Cook>> 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<Cook>> map = {};
          String cid = item.id;
          String className = item.className;

          List<Cook> temp = [];
          for (Cook 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<Cook> 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;
          Cook 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(90),
                          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.numStr ?? ''}${setmeal.spec}',
                            overflow: TextOverflow.ellipsis,
                            maxLines: 1,
                            style: TextStyle(
                                color: MyColours.color_515151,
                                fontSize: ScreenUtil().setSp(32)),
                          )),
                      HEmptyView(16),
                      setmeal.isTrim == '0'
                          ? Text(
                              '不可调菜',
                              overflow: TextOverflow.ellipsis,
                              maxLines: 1,
                              style: TextStyle(
                                  color: MyColours.color_E34D59,
                                  fontSize: ScreenUtil().setSp(32)),
                            )
                          : Expanded(
                              child: Row(
                              children: [
                                Text(
                                  '调为',
                                  overflow: TextOverflow.ellipsis,
                                  maxLines: 1,
                                  style: TextStyle(
                                      color: MyColours.color_438E93,
                                      fontSize: ScreenUtil().setSp(32)),
                                ),
                                HEmptyView(16),
                                Expanded(
                                    child:
                                        _textfield('菜名', setmeal.nameC, null)),
                                HEmptyView(16),
                                _textfield('数量', setmeal.numC, null,
                                    inputType: TextInputType.number,
                                    width: w(56))
                              ],
                            ))
                    ],
                  )),
            ),
          );
        }
      },
    );
  }

  // // 总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 Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Expanded(
                    child: SingleChildScrollView(
                  controller: controller,
                  child: Padding(
                      padding: EdgeInsets.only(left: w(16)),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          VEmptyView(64),
                          Text(
                            feastModel.setmealDetail.mealName,
                            style: TextStyle(
                                color: MyColours.color_E6000000,
                                fontSize: font(16)),
                          ),
                          VEmptyView(24),
                          MyDivider(
                            double.infinity,
                            h(1),
                            color: MyColours.color_E7E7E7,
                          ),
                          VEmptyView(64),
                          ListView.builder(
                            shrinkWrap: true,
                            controller: controller,
                            padding: EdgeInsets.only(right: w(12)),
                            itemCount: data.length,
                            itemBuilder: (BuildContext context, int index) {
                              return buildItemWidget(context, index);
                            },
                          )
                        ],
                      )),
                )),
                Row(
                  children: [
                    Expanded(
                        child: _callButton(
                            onPress: () {
                              Navigator.pop(context);
                            },
                            content: '返回',
                            hasLeftBorder: true,
                            isSelect: false)),
                    Expanded(
                        child: _callButton(
                            onPress: () async {
                              FocusScope.of(context).requestFocus(FocusNode());
                              // setModel = [];
                              data.forEach((key, value) {
                                List<Cook> temp = [];
                                value.forEach((element) {
                                  if (element.nameC.text.trim().length > 0) {
                                    //已调菜
                                    // setModel.add({
                                    //   'id': element.id,
                                    //   'cname': element.nameC.text
                                    // });
                                    element.cname = element.nameC.text;
                                    element.numStr = element.numC.text;
                                    temp.add(element);
                                  } else {
                                    temp.add(element);
                                  }
                                });
                                dataNew[key] = temp;
                              });
                              // if (setModel.length > 0) {
                              // bool success = await feastModel
                              //     .setBanquetInfoCook(context,
                              //         {'data': json.encode(setModel)});
                              // if (success) {

                              Map temp = {
                                'object': dataNew,
                              };
                              Navigator.of(context).pop(temp);
                              // }
                            },
                            content: '保存并返回',
                            hasLeftBorder: true,
                            isSelect: true))
                  ],
                )
              ],
            );
          }
        }));
  }
}