grant_page.dart 11.9 KB
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/consume_qrcode_model.dart';
import 'package:one_key/provider/finance_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/screen_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:provider/provider.dart';

/**
 * 发放消费金
 */

class GrantPage extends StatefulWidget {
  const GrantPage({super.key});

  @override
  State<GrantPage> createState() => _GrantPageState();
}

class _GrantPageState extends State<GrantPage> {
  ScrollController controller = ScrollController();
  List<ConsumeQrcodeSunModel> ladderSelectFree = [];
  FinanceProvider? financeProvider;

  @override
  void initState() {
    super.initState();
    ConsumeQrcodeSunModel model = ConsumeQrcodeSunModel();
    ladderSelectFree.add(model);

    WidgetsBinding.instance.addPostFrameCallback((_) {
      _geConsumeQrcode();
    });
  }

  _geConsumeQrcode() async {
    Map<String, String> pramas = {
      'sellerid':
          Provider.of<UserModel>(context, listen: false).user!.sellerid!,
    };
    await financeProvider!.geConsumeQrcode(context, pramas);
    if (financeProvider!.consumeQrcodeData != null) {
      //有数据
      ladderSelectFree = [];
      ladderSelectFree.addAll(financeProvider!.consumeQrcodeData!);
      setState(() {});
    }
  }

  _createConsumeQrcode(String amounts) async {
    Map<String, String> pramas = {
      'sellerid':
          Provider.of<UserModel>(context, listen: false).user!.sellerid!,
      'amount': amounts
    };
    bool success = await financeProvider!.createConsumeQrcode(context, pramas);
    if (success) {
      Navigator.pop(context);
    }
  }

  ///发放阶梯
  Widget _ladderWidget() {
    return ListView.builder(
        controller: controller,
        shrinkWrap: true,
        itemCount: ladderSelectFree.length,
        itemBuilder: (context, index) {
          ConsumeQrcodeSunModel data = ladderSelectFree[index];
          return Container(
            padding: EdgeInsets.only(
              left: w(16),
              // top: w(12),
              bottom: w(12),
            ),
            child: Column(
              children: [
                Container(
                  height: w(48),
                  padding: EdgeInsets.only(right: w(16)),
                  decoration: BoxDecoration(
                      border: Border(
                          bottom: BorderSide(
                              color: MyColours.color_E7E7E7, width: w(0.5)))),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text(
                        '发放(${index + 1})',
                        style: TextStyle(
                            color: MyColours.color_515151, fontSize: font(14)),
                      ),
                      InkWell(
                          onTap: () {
                            //删除媒体

                            if (data.amount != null) {
                              // 确认是否删除

                              //弹框确认是否删除
                              DialogUtil.cupertinoAlertDialog(context,
                                  title: "",
                                  content: "确定要将该发放金删除吗?",
                                  rTitle: "确定", rCallback: () async {
                                //接口删除
                                Map<String, String?> pramas = {
                                  'id': data.id,
                                };

                                bool success = await financeProvider!
                                    .delConsumeQrcode(context, pramas);
                                if (success) {
                                  //删除成功,刷新页面

                                  setState(() {
                                    ladderSelectFree.removeAt(index);
                                  });
                                }
                              });
                            } else {
                              //本地删除数据
                              setState(() {
                                ladderSelectFree.removeAt(index);
                              });
                            }
                          },
                          child: Padding(
                            padding: EdgeInsets.only(top: w(8), bottom: w(8)),
                            child: Text(
                              '删除',
                              style: TextStyle(
                                  color: MyColours.color_438E93,
                                  fontSize: font(12)),
                            ),
                          ))
                    ],
                  ),
                ),
                _ladderPriceWidget(data, FocusNode(), width: 50),
              ],
            ),
          );
        });
  }

  //阶梯返还金额widget
  Widget _ladderPriceWidget(ConsumeQrcodeSunModel data, FocusNode focusNodeGive,
      {num width = 40}) {
    return Container(
      height: w(40),
      margin: EdgeInsets.only(left: w(width)),
      padding: EdgeInsets.only(top: w(8), bottom: w(8)),
      decoration: BoxDecoration(
          border: Border(
              bottom:
                  BorderSide(color: MyColours.color_E7E7E7, width: w(0.5)))),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          Text(
            '发放消费金',
            style: TextStyle(color: MyColours.color_515151, fontSize: font(14)),
          ),
          HEmptyView(10),
          Expanded(
              child: Container(
            width: w(54),
            height: w(26),
            alignment: Alignment.center,
            // padding: EdgeInsets.symmetric(vertical: w(10)), // 增加边缘的点击区域
            decoration: BoxDecoration(
                border: Border.all(color: MyColours.color_999999, width: w(1))),
            child: TextField(
                controller: data.amountC,
                textAlign: TextAlign.center,
                textAlignVertical: TextAlignVertical.center,
                maxLines: 1,
                // //光标颜色
                // cursorColor:
                //     widget.isSelect ? Colors.white : MyColours.color_199095,
                //输入文本的样式
                inputFormatters: [
                  FilteringTextInputFormatter.allow(RegExp("[0-9.]")),
                ], // 限制输入为数字,
                style: TextStyle(
                  color: MyColours.color_515151,
                  fontSize: ScreenUtil().setSp(20),
                ),
                focusNode: focusNodeGive,
                decoration: InputDecoration(
                  contentPadding: EdgeInsets.zero,
                  isCollapsed: true,
                  border: OutlineInputBorder(borderSide: BorderSide.none),
                  hintText: '请输入数字',
                  hintStyle: TextStyle(
                    color: MyColours.color_999999,
                    fontSize: ScreenUtil().setSp(20),
                  ),
                  enabledBorder: new UnderlineInputBorder(
                    borderSide: BorderSide.none,
                  ),
                  focusedBorder: new UnderlineInputBorder(
                    borderSide: BorderSide.none,
                  ),
                ),
                onChanged: (value) {},
                onEditingComplete: () {
                  FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
                },
                keyboardType: TextInputType.numberWithOptions()),
          )),
          HEmptyView(10),
          Text(
            '元',
            style: TextStyle(color: MyColours.color_515151, fontSize: font(14)),
          ),
          HEmptyView(10),
          Spacer(),
          if (data.qrcode != null)
            RoundButton(
              text: '查看二维码',
              width: w(86),
              height: w(24),
              fontSize: 28,
              gradientStart: MyColours.color_438E93,
              gradientEnd: MyColours.color_438E93,
              textColor: MyColours.color_ffffff,
              isBold: false,
              radius: 5,
              onPressed: () {
                //跳转到二维码展示页面
                // String qrcode = data.qrcode ?? '';
                // String account = data.amount ?? '';
                NavigatorUtil.goGrantWechatPage(context, data);
              },
            ),
          HEmptyView(32),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    financeProvider = Provider.of<FinanceProvider>(context, listen: true);
    return Scaffold(
      backgroundColor: MyColours.color_ffffff,
      appBar: SystemAppBar('发放消费金'),
      body: Column(
        children: [
          Expanded(
              child: SingleChildScrollView(
            child: Column(
              children: [
                _ladderWidget(),
                InkWell(
                    onTap: () {
                      ConsumeQrcodeSunModel model = ConsumeQrcodeSunModel();
                      ladderSelectFree.add(model);
                      setState(() {});
                    },
                    child: Container(
                      height: w(30),
                      margin: EdgeInsets.only(left: w(60), right: w(16)),
                      alignment: Alignment.centerLeft,
                      child: Text(
                        '+增加阶梯',
                        style: TextStyle(
                            color: MyColours.color_438E93, fontSize: font(12)),
                      ),
                    )),
              ],
            ),
          )),
          Container(
            padding: EdgeInsets.only(
                top: w(13), left: w(45), right: w(45), bottom: w(26)),
            child: RoundButton(
              text: '保存',
              height: w(43),
              radius: r(5),
              gradientStart: MyColours.color_438E93,
              gradientEnd: MyColours.color_438E93,
              borderColor: MyColours.color_438E93,
              textColor: MyColours.color_ffffff,
              isBold: true,
              fontSize: 32,
              onPressed: () {
                // 调用接口
                // 组装amount数据

                if (ladderSelectFree.length == 0) {
                  //请点击增加阶梯按钮设置发放消费金金额
                  Utils.showToast('请点击【增加阶梯】按钮设置发放消费金金额');
                  return;
                }

                //判断阶梯里面的数据   实际支付金额是否输入

                bool canPrice = ladderSelectFree
                    .any((e) => e.amountC.text.trim().length == 0);
                if (canPrice) {
                  int index = ladderSelectFree
                      .indexWhere((e) => e.amountC.text.trim().length == 0);

                  Utils.showToast('请输入发放(${index + 1})的发放消费金金额!');
                  return;
                }

                FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
                String amounts = '';

                ladderSelectFree.forEach((e) {
                  amounts += (e.amountC.text + ',');
                });
                if (amounts.endsWith(',')) {
                  amounts = amounts.substring(0, amounts.length - 1);
                }

                _createConsumeQrcode(amounts);
              },
            ),
          )
        ],
      ),
    );
  }
}