coupon_edit_page.dart 13.7 KB
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_picker/flutter_picker.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:one_key/provider/coupon_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';

/**
 * 新建券
 */

class CouponEidtPage extends StatefulWidget {
  CouponEidtPage({Key key}) : super(key: key);

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

class _CouponEidtPageState extends State<CouponEidtPage> {
  ScrollController controller = ScrollController();
  TextEditingController _couponNameEditControl = TextEditingController();
  TextEditingController _couponRequireEditControl = TextEditingController();
  TextEditingController _couponExplainEditControl = TextEditingController();
  final heightCell = ScreenUtil().setWidth(80);
  bool swichState = true; //默认启用 开关状态
  final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
  String fromDate = '点击选择'; //有效期开始时间
  String endDate = '点击选择'; //有效期结束时间
  FocusNode _nameFocusNode = FocusNode();
  FocusNode _requireFocusNode = FocusNode();
  bool showDateSelWidget = false;
  CouponProvider couponProvider;

  @override
  void initState() {
    super.initState();
    _nameFocusNode.addListener(() {
      if (_nameFocusNode.hasFocus) {
        //有焦点
        if (showDateSelWidget) {
          Navigator.pop(context);
          showDateSelWidget = false;
        }
      } else {
        //失去焦点
        // _editingController.text = '';
      }
    });
    _requireFocusNode.addListener(() {
      if (_requireFocusNode.hasFocus) {
        //有焦点
        if (showDateSelWidget) {
          Navigator.pop(context);
          showDateSelWidget = false;
        }
      } else {
        //失去焦点
        // _editingController.text = '';
      }
    });
  }

  //创建新券 客户经理创建活动
  _createNewCoupon() async {
    FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
    Map<String, String> params = {
      "uid": Provider.of<UserModel>(context, listen: false).user.openid,
      "aname": _couponNameEditControl.text.trim(),
      "desc": _couponRequireEditControl.text.trim(),
      "stime": fromDate == '点击选择'
          ? ""
          : '${DateUtil.getDateMsByTimeStr(fromDate) / 1000}',
      "etime": endDate == '点击选择'
          ? ''
          : '${DateUtil.getDateMsByTimeStr(endDate) / 1000}',
      "explain": _couponExplainEditControl.text,
      "is_open": swichState ? "1" : "0",
      "status": swichState ? "1" : "0"
    };
    bool isSuccess =
        await couponProvider.createCustomerActivity(context, params);
    if (isSuccess) {
      //成功之后跳回前一个页面
      // bus.emit('refresh_coupon_list');
      Navigator.pop(context, true);
    }
  }

  ///输入框
  Widget _textfield(String title, String hintText) {
    return Container(
      height: heightCell,
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Container(
            // height: ScreenUtil().setWidth(40),
            // color: Colors.red,
            child: Text(
              title,
              style: TextStyle(
                  fontWeight: FontWeight.bold,
                  fontSize: ScreenUtil().setSp(30)),
            ),
          ),
          HEmptyView(20),
          Expanded(
            child: TextField(
              controller: title == '券名称'
                  ? _couponNameEditControl
                  : _couponRequireEditControl,
              textAlign: TextAlign.right,
              maxLines: 1,
              // //光标颜色
              // cursorColor:
              //     widget.isSelect ? Colors.white : MyColours.color_199095,
              //输入文本的样式
              style: TextStyle(
                fontSize: ScreenUtil().setSp(26),
              ),
              focusNode: title == '券名称' ? _nameFocusNode : _requireFocusNode,
              // textAlignVertical: TextAlignVertical.bottom,
              decoration: InputDecoration(
                // fillColor: Colors.lightGreenAccent,
                // filled: true,
                border: OutlineInputBorder(borderSide: BorderSide.none),
                hintText: hintText,
                hintStyle: TextStyle(
                  color: MyColours.color_999999,
                  fontSize: ScreenUtil().setSp(26),
                ),
                // contentPadding: EdgeInsets.only(
                //     bottom: ScreenUtil().setWidth(30)), //ios 17
                // border: InputBorder.none,
              ),
              onChanged: (value) {},
              onEditingComplete: () {
                FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
              },
              keyboardType: TextInputType.text,
            ),
          )
        ],
      ),
    );
  }

  ///时间选择
  Widget _select(String title, String hintText) {
    return InkWell(
      onTap: () {
        FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
        //弹出时间选择器
        // showPickerDateTime(context);
        showDateSelWidget = true;
        DialogUtil.showPickerDateTime24(
            context,
            scaffoldKey,
            (value) {
              // {'text': picker.adapter.text, 'select': selecteds}
              if (value != null) {
                if (title == '有效期从') {
                  setState(() {
                    print(value);
                    fromDate =
                        DateUtil.formatDateStr(value, format: DateFormats.full);
                  });
                } else if (title == '有效期至') {
                  setState(() {
                    print(value);
                    endDate =
                        DateUtil.formatDateStr(value, format: DateFormats.full);
                  });
                }
              }
              showDateSelWidget = false;
            },
            dateTime: title == '有效期从'
                ? DateUtil.getDateTime(fromDate)
                : DateUtil.getDateTime(endDate),
            onCancel: () {
              showDateSelWidget = false;
            });
      },
      child: Container(
        height: heightCell,
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              // height: ScreenUtil().setWidth(40),
              // color: Colors.red,
              child: Text(
                title,
                style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: ScreenUtil().setSp(30)),
              ),
            ),
            HEmptyView(20),
            Spacer(),
            Text(hintText,
                style: TextStyle(
                  color: hintText == '点击选择'
                      ? MyColours.color_999999
                      : MyColours.color_333333,
                  fontSize: ScreenUtil().setSp(26),
                )),
            HEmptyView(20),
            Image.asset(
              Utils.getImgPath('arr_right_gray'),
              width: ScreenUtil().setWidth(12),
              height: ScreenUtil().setWidth(22),
            )
          ],
        ),
      ),
    );
  }

  ///券说明
  Widget _explain(String title, String hintText) {
    return Container(
      // height: ScreenUtil().setWidth(380),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
            height: heightCell,
            child: Align(
                alignment: Alignment.centerLeft,
                child: Text(
                  title,
                  textAlign: TextAlign.left,
                  style: TextStyle(
                      fontWeight: FontWeight.bold,
                      fontSize: ScreenUtil().setSp(30)),
                )),
          ),
          VEmptyView(10),
          TextField(
            controller: _couponExplainEditControl,
            // keyboardType: TextInputType.number, //键盘类型,数字键盘
            maxLines: 7,
            // maxLength: 200,
            // maxLengthEnforced: true,

            decoration: InputDecoration(
              contentPadding: EdgeInsets.all(ScreenUtil().setWidth(20)),
              hintText: hintText,
              fillColor: MyColours.color_EEEEEE,
              filled: true,
              border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(15),
                  borderSide: BorderSide.none),
            ),
            onChanged: (value) {},
          ),
        ],
      ),
    );
  }

  ///是否立即启用
  Widget _canUse(String title) {
    return InkWell(
      onTap: () {
        setState(() {
          swichState = !swichState;
        });
      },
      child: Container(
        padding: EdgeInsets.only(top: ScreenUtil().setWidth(30)),
        // height: heightCell,
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              // height: ScreenUtil().setWidth(40),
              // color: Colors.red,
              child: Text(
                title,
                style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: ScreenUtil().setSp(30)),
              ),
            ),
            Spacer(),
            Image.asset(
              swichState
                  ? Utils.getImgPath('swich_on')
                  : Utils.getImgPath('swich_off'),
              width: ScreenUtil().setWidth(122),
              height: ScreenUtil().setWidth(82),
            )
          ],
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    couponProvider = Provider.of<CouponProvider>(context, listen: true);
    return Scaffold(
      key: scaffoldKey,
      appBar: SystemAppBar(
        '创建新券',
        onTap: () {
          Navigator.pop(context, false);
        },
      ),
      body: InkWell(
          onTap: () {
            FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
          },
          child: Column(children: [
            Expanded(
              child: SingleChildScrollView(
                  controller: controller,
                  physics: BouncingScrollPhysics(),
                  child: Padding(
                      padding: EdgeInsets.symmetric(
                          horizontal: ScreenUtil().setWidth(40)),
                      child: Column(
                        children: [
                          VEmptyView(20),
                          _textfield('券名称', '例:9折券/200元代金券/菜品券'),
                          _textfield('券要求', '例:无门槛/满2000元'),
                          _select('有效期从', fromDate),
                          _select('有效期至', endDate),
                          _explain('券说明', '例:可用包间,停车免费,不与店内其他活动共享等'),
                          _canUse('是否立即启用'),
                        ],
                      ))),
            ),
            VEmptyView(20),
            Padding(
                padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
                    ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
                child: RoundButton(
                  onPressed: () {
                    if (_couponNameEditControl.text.trim().length == 0) {
                      Utils.showToast('请填写券名称');
                      return;
                    }
                    if (_couponRequireEditControl.text.trim().length == 0) {
                      Utils.showToast('请填写券要求');
                      return;
                    }
                    if (fromDate == '点击选择') {
                      Utils.showToast('请选择有效期起始时间');
                      return;
                    }
                    if (endDate == '点击选择') {
                      Utils.showToast('请选择有效期结束时间');
                      return;
                    }
                    if (DateUtil.getDateTime(endDate)
                            .compareTo(DateUtil.getDateTime(fromDate)) <
                        0) {
                      Utils.showToast('有效期结束时间不能早于起始时间');
                      return;
                    }
                    // ***参数***
                    // _couponNameEditControl.text
                    // _couponRequireEditControl.text
                    // fromDate
                    // endDate
                    // _couponExplainEditControl.text
                    // swichState
                    _createNewCoupon();
                  },
                  text: '保存',
                  fontSize: 34,
                  isBold: false,
                  height: ScreenUtil().setWidth(80),
                  width: double.infinity,
                  radius: ScreenUtil().setWidth(10),
                ))
          ])),
    );
  }
}