feast_personal_page.dart 10.2 KB
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/filter_btn_model.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:provider/provider.dart';

import '../../../constant/state.dart';
import '../../../provider/feast_model.dart';
import '../../../provider/user_model.dart';
import '../../../res/colors.dart';
import '../../../utils/dialog_util.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/system_app_bar.dart';

/**
 * 宴会员工
 */

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

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

class _FeastPersonalPageState extends State<FeastPersonalPage> {
  late FeastModel feastModel;
  @override
  void initState() {
    super.initState();
    Utils.changeStatusColor(color: MyColours.color_438E93);
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _getData();
      // scrollController.jumpTo(scrollController.position.minScrollExtent);
    });
  }

  _getData() async {
    (bool, bool) result = await (_getSellerUserBySellerid(), _getStaff()).wait;

    if (result.$1 && result.$2) {
      //成功
      feastModel.sellerManageList.forEach((element) {
        if (feastModel.getPersonnalList.contains(element.id)) {
          element.select = true;
          feastModel.selectPersonnalData.add(element.id);
        } else {
          element.select = false;
        }
      });
      feastModel.getCheckValueMy();
    }
  }

  ///获取经理数据
  Future<bool> _getSellerUserBySellerid() async {
    bool success = await feastModel.getAuthUserLists(context);
    if (success) {
      return true;
    } else {
      return false;
    }
  }

  ///
  Future<bool> _getStaff() async {
    bool success = await feastModel.getStaff(context);
    if (success) {
      return true;
    } else {
      return false;
    }
  }

  Widget buildFeastTypeHeader() {
    return RoundButton(
      onPressed: () {
        if (feastModel.checkValue) {
          feastModel.cancelAllMy();
        } else {
          feastModel.addAllMy();
        }
      },
      text: '全选',
      fontSize: 32,
      isBold: false,
      height: h(32),
      width: w(48),
      margin: EdgeInsets.only(top: w(18), bottom: w(4)),
      textColor: feastModel.checkValue
          ? MyColours.color_ffffff
          : MyColours.color_438E93,
      gradientStart: feastModel.checkValue
          ? MyColours.color_438E93
          : MyColours.color_ffffff,
      gradientEnd: feastModel.checkValue
          ? MyColours.color_438E93
          : MyColours.color_ffffff,
      borderColor: MyColours.color_438E93,
      radius: r(6),
    );
  }

  Widget buildFeastTypeItem(FilterBtnModel model, int index) {
    return InkWell(
        onTap: () {
          model.select = !model.select!;
          if (model.select!) {
            feastModel.addDataMy(index);
          } else {
            feastModel.cancelDataMy(index);
          }
          feastModel.getCheckValueMy();
        },
        child: Column(
          children: [
            Container(
              constraints: BoxConstraints(minHeight: h(48)),
              margin: EdgeInsets.only(top: w(12)),
              // decoration: BoxDecoration(
              //     border: Border(
              //         bottom:
              //             BorderSide(width: w(1), color: MyColours.color_E7E7E7))),
              child: Row(
                children: [
                  Image.asset(
                    Utils.getImgPath(model.select! ? 'select' : 'unselect'),
                    width: w(24),
                    height: w(24),
                  ),
                  HEmptyView(16),
                  Expanded(
                    child: Text(
                      '${model.title}  ${model.phone ?? ''}',
                      style: TextStyle(
                          fontSize: font(16), color: MyColours.color_E6000000),
                    ),
                  ),
                  // Spacer(),
                  Text(
                    '${model.roleName} ${model.account}',
                    style: TextStyle(
                        fontSize: font(14), color: MyColours.color_999999),
                  ),
                  HEmptyView(32),
                ],
              ),
            ),
            Padding(
                padding: EdgeInsets.only(left: w(32)),
                child: MyDivider(
                  double.infinity,
                  w(0.5),
                  color: MyColours.color_E7E7E7,
                ))
          ],
        ));
  }

  Widget _callButton(
      {GestureTapCallback? onPress,
      required 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)),
          ),
        ),
      ),
    );
  }

  @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: () {
          if (Navigator.canPop(context)) {
            Navigator.pop(context);
          }
        },
      ),
      body: Consumer<FeastModel>(builder: (context, model, _) {
        if (model.pageStatePersonnalHome != PageState.Success) {
          return ExceptionPage(
            pageState: model.pageStatePersonnalHome,
            callback: () {
              _getData();
            },
            emptyMsg: "暂时没有员工哦",
            emptyImg: "empty_search",
            showMsg: "加载中,请稍候...",
          );
        } else {
          return Column(
            children: [
              Expanded(
                  child: NestedScrollView(
                // controller: _scrollViewController,
                headerSliverBuilder:
                    (BuildContext context, bool innerBoxIsScrolled) {
                  return <Widget>[
                    SliverAppBar(
                      pinned: true,
                      floating: false,
                      leading: null,
                      backgroundColor: MyColours.color_ffffff,
                      expandedHeight: ScreenUtil().setWidth(56 * 2),
                      automaticallyImplyLeading: false,
                      title: buildFeastTypeHeader(),
                      // flexibleSpace: FlexibleSpaceBar(
                      //     collapseMode: CollapseMode.pin,
                      //     title: buildFeastTypeHeader())
                    )
                  ];
                },
                body: ListView.builder(
                    itemCount: feastModel.sellerManageList.length,
                    padding: EdgeInsets.only(left: w(16)),
                    itemBuilder: (BuildContext context, int index) {
                      FilterBtnModel model = feastModel.sellerManageList[index];
                      return buildFeastTypeItem(model, index);
                    }),
              )),
              Row(
                children: [
                  Expanded(
                      child: _callButton(
                          onPress: () {
                            if (Navigator.canPop(context)) {
                              Navigator.pop(context);
                            }
                          },
                          content: '返回',
                          hasLeftBorder: true,
                          isSelect: false)),
                  Expanded(
                      child: _callButton(
                          onPress: () async {
                            if (feastModel.selectPersonnalData.length == 0) {
                              Utils.showToast('请至少选择一个员工!');
                              return;
                            }
                            Map<String, String?> params = {
                              "sid":
                                  Provider.of<UserModel>(context, listen: false)
                                      .user!
                                      .sellerid,
                              'user_id': Utils.listToStringEnglish(
                                  feastModel.selectPersonnalData)
                            };
                            bool success =
                                await feastModel.addStaff(context, params);
                            if (success) {
                              Utils.showToast('保存成功');
                              if (Navigator.canPop(context)) {
                                Navigator.pop(context);
                              }
                            }
                          },
                          content: '保存',
                          hasLeftBorder: true,
                          isSelect: true))
                ],
              )
            ],
          );
        }
      }),
    );
  }
}