feast_set_page.dart 12.2 KB
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/otherset_model.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:provider/provider.dart';

import '../../constant/state.dart';
import '../../models/set_xuan_tai_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/round_button.dart';
import '../../widgets/system_app_bar.dart';
import '../../widgets/v_empty_view.dart';

/**
 * 添加配置
 */
class FeastSetPage extends StatefulWidget {
  final List<Other> justSelData;
  FeastSetPage({Key key, this.justSelData}) : super(key: key);

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

class _FeastSetPageState extends State<FeastSetPage> {
  FeastModel feastModel;
  List<Other> otherData = [];
  @override
  void initState() {
    super.initState();
    Utils.changeStatusColor(color: MyColours.color_438E93);
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _getOthersetList();
      // scrollController.jumpTo(scrollController.position.minScrollExtent);
    });
  }

  ///获取其他配置
  Future<bool> _getOthersetList({bool isShowLoading = true}) async {
    bool success =
        await feastModel.getOthersetList(context, isShowLoading: isShowLoading);
    if (success) {
      List<String> otherids = widget.justSelData.map((e) {
        return e.otherId;
      }).toList();
      for (OthersetSunModel item in feastModel.otherData) {
        Other other = Other();
        other.otherId = item.id;
        other.name = item.otherName;
        other.bargaining = item.bargaining;
        other.price = item.price;
        other.finalPriceC = TextEditingController();
        other.numC = TextEditingController();
        other.spec = item.spec;

        if (otherids.contains(item.id)) {
          other.select = true;
          int index = widget.justSelData
              .indexWhere((element) => element.otherId == item.id);
          Other widgetData = widget.justSelData[index];
          other.finalPriceC.text = widgetData.finalPrice;
          other.numC.text = widgetData.numStr;
        } else {
          other.select = false;
        }

        other.price = item.price;
        otherData.add(other);
      }
      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)),
          ),
        ),
      ),
    );
  }

  ///输入框
  Widget _textfield(String hintText, TextEditingController editingController,
      FocusNode focusNode,
      {TextInputType inputType = TextInputType.number, double width}) {
    return Container(
      width: width,
      padding: EdgeInsets.symmetric(horizontal: w(6)),
      decoration: BoxDecoration(
          border: Border.all(width: h(1), color: MyColours.color_438E93)),
      child: Container(
          // height: ScreenUtil().setHeight(120),
          height: ScreenUtil().setWidth(44),
          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,
            textAlign: TextAlign.center,
            decoration: InputDecoration(
              border: OutlineInputBorder(borderSide: BorderSide.none),
              hintText: hintText,
              hintStyle: TextStyle(
                color: hintText == ''
                    ? MyColours.color_999999
                    : MyColours.color_000000,
                fontSize: ScreenUtil().setSp(28),
              ),
              contentPadding: EdgeInsets.zero,
            ),
            onChanged: (value) {},
            onEditingComplete: () {
              FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
            },
            keyboardType: inputType,
          )),
    );
  }

  Widget buildListItem(Other data) {
    return Container(
        padding: EdgeInsets.only(
            top: h(25), bottom: h(10), left: w(12), right: w(12)),
        decoration: BoxDecoration(
            border: Border(
                bottom:
                    BorderSide(width: w(1), color: MyColours.color_DBDBDB))),
        child: Column(
          children: [
            Row(
              children: [
                Row(children: [
                  InkWell(
                      onTap: () {
                        setState(() {
                          data.select = !data.select;
                        });
                      },
                      child: Row(
                        children: [
                          Image.asset(
                            Utils.getImgPath(
                                data.select ? 'f_select' : 'f_select_not'),
                            width: w(24),
                          ),
                          HEmptyView(24),
                          Text(
                            data.name,
                            style: TextStyle(
                                color: data.select
                                    ? MyColours.color_515151
                                    : MyColours.color_999999,
                                fontSize: font(16),
                                fontWeight: FontWeight.bold),
                          )
                        ],
                      ))
                ]),
                Spacer(),
                Text(
                  '原价:${data.price}元/${data.spec}',
                  style: TextStyle(
                    color: MyColours.color_999999,
                    fontSize: font(14),
                  ),
                ),
              ],
            ),
            data.select ? VEmptyView(42) : SizedBox(),
            data.select
                ? Row(
                    children: [
                      data.bargaining == '1'
                          ? Row(
                              children: [
                                _textfield('', data.finalPriceC, null,
                                    width: w(103)),
                                Text(
                                  ' 元',
                                  style: TextStyle(
                                    color: MyColours.color_515151,
                                    fontSize: font(14),
                                  ),
                                ),
                              ],
                            )
                          : Text(
                              '议价:不可议价',
                              style: TextStyle(
                                color: MyColours.color_515151,
                                fontSize: font(14),
                              ),
                            ),
                      Spacer(),
                      Text(
                        '数量:',
                        style: TextStyle(
                          color: MyColours.color_515151,
                          fontSize: font(14),
                        ),
                      ),
                      _textfield('', data.numC, null, width: w(103)),
                      Text(
                        ' ${data.spec}',
                        style: TextStyle(
                          color: MyColours.color_515151,
                          fontSize: font(14),
                        ),
                      ),
                    ],
                  )
                : SizedBox(),
          ],
        ));
  }

  @override
  Widget build(BuildContext context) {
    feastModel = Provider.of<FeastModel>(context, listen: true);
    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.pageStateOther != PageState.Success) {
            return ExceptionPage(
              pageState: model.pageStateOther,
              callback: () {
                _getOthersetList();
              },
              emptyMsg: "暂时没有配置列表哦",
              emptyImg: "empty_search",
              showMsg: "加载中,请稍后...",
            );
          } else {
            return Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Expanded(
                    child: ListView.builder(
                  shrinkWrap: true,
                  itemCount: otherData.length,
                  itemBuilder: (BuildContext context, int index) {
                    Other data = otherData[index];
                    return buildListItem(data);
                  },
                )),
                Row(
                  children: [
                    Expanded(
                        child: _callButton(
                            onPress: () {
                              Navigator.pop(context);
                            },
                            content: '返回',
                            hasLeftBorder: true,
                            isSelect: false)),
                    Expanded(
                        child: _callButton(
                            onPress: () {
                              List<Other> selectData = [];
                              if (otherData.length > 0) {
                                String otherIds = "";
                                for (Other item in otherData) {
                                  if (item.select) {
                                    item.finalPrice = item.finalPriceC.text;
                                    item.numStr = item.numC.text;

                                    selectData.add(item);
                                    otherIds += item.otherId + ",";
                                  }
                                }
                                if (otherIds.length > 0) {
                                  otherIds = otherIds.substring(
                                      0, otherIds.length - 1);
                                }

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