coupon_sun_page.dart 9.1 KB
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/personnel_manage_model.dart';
import 'package:one_key/pages/coupon/coupon_item_f.dart';
import 'package:one_key/provider/coupon_provider.dart';
import 'package:one_key/provider/personnel_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/event_bus.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';

import '../../models/coupon_model.dart';
import '../../provider/marketing_center_provider.dart';

class CouponSunPage extends StatefulWidget {
  final int? index;
  CouponSunPage({Key? key, this.index}) : super(key: key);

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

class _CouponSunPageState extends State<CouponSunPage> {
  late MarketingCenterProvider marketingCenterProvider;
  late CouponProvider couponProvider;
  EasyRefreshController _controller = EasyRefreshController();
  PersonnelProvider? personnelProvider;
  List<PersonnelManageSunModel> authUserLists = [];
  List<CouponSunModel> couponDataList = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((_) {
      if (widget.index == 0) {
        couponProvider.pageState = PageState.Loading;
      } else if (widget.index == 3) {
        couponProvider.pageStateStore = PageState.Loading;
      } else if (widget.index == 4) {
        couponProvider.pageStateMine = PageState.Loading;
      }
      couponProvider.notifyListeners();
      // _couponNetworkData(widget.index, isShowLoading: false);
      _getCouponData();

      bus.on("refresh_coupon_list_f", (arg) {
        // _couponNetworkData(widget.index);
        _getCouponData();
      });
    });
  }

  @override
  void dispose() {
    super.dispose();
  }

  ///获取优惠券列表数据
  Future<bool> _couponNetworkData(int? index,
      {bool isShowLoading = true}) async {
    Map<String, String?> params = {
      "uid": Provider.of<UserModel>(context, listen: false).user!.openid,
      // 'is_time': '0'
      "is_type": index.toString()
    };
    List<CouponSunModel>? couponList = await couponProvider.getCustomerActivity(
        context, params, index,
        isShowLoading: isShowLoading);
    if (couponList != null && couponList.length > 0) {
      return true;
    } else {
      return false;
    }
    // if (widget.index == 0 || widget.index == 1) {
    //   //营销中心设置的券是可核销的店铺券
    // }
  }

  _getCouponData() async {
    (bool, bool) result = await (
      _couponNetworkData(widget.index, isShowLoading: false),
      getSellerTemplateConf(context)
    ).wait;

    if (result.$1 && result.$2) {
      //成功

      couponProvider.couponList!.forEach((element) {
        couponDataList.forEach((marking) {
          if (element.id == marking.id) {
            element.isMarking = true;
          }
        });
      });
      print(couponProvider.couponList);
      setState(() {});
    } else {
      // if (!results[0]) {
      //   //没有优惠券
      // } else {}
      // if (!results[1]) {
      //   //没有营销中心数据
      // } else {}
      setState(() {});
    }
  }

  Future<bool> getSellerTemplateConf(BuildContext context) async {
    bool success = await marketingCenterProvider.getSellerTemplateConf(context);
    if (success &&
        marketingCenterProvider.markDataModel != null &&
        marketingCenterProvider.markDataModel!.marketing != null) {
      couponDataList =
          marketingCenterProvider.markDataModel!.marketing!.couponDataListPay ??
              [];
      if (marketingCenterProvider
                  .markDataModel!.marketing!.couponDataListFree !=
              null &&
          marketingCenterProvider
                  .markDataModel!.marketing!.couponDataListFree!.length >
              0) {
        couponDataList.addAll(marketingCenterProvider
            .markDataModel!.marketing!.couponDataListFree!);
      }

      return true;
    } else {
      return false;
    }
  }

  ///修改活动信息
  _setCustomerActivity(int index) async {
    Map<String, String?> params = {
      "id": couponProvider.couponList![index].id,
      "status": couponProvider.couponList![index].isOpenBool ? '1' : '0',
      'is_open': couponProvider.couponList![index].isOpenBool ? '1' : '0',
    };
    bool isSuccess = await couponProvider.setCustomerActivity(context, params,
        isShowLoading: true);
    print(isSuccess);
    // bus.emit('refresh_marketting_page');
    _couponNetworkData(widget.index, isShowLoading: true);
    // if (isSuccess) {
    //   couponProvider.notifyListeners();
    // } else {
    //   couponProvider.couponList[index].isOpenBool =
    //       !couponProvider.couponList[index].isOpenBool;
    //   couponProvider.notifyListeners();
    // }
  }

  @override
  Widget build(BuildContext context) {
    marketingCenterProvider =
        Provider.of<MarketingCenterProvider>(context, listen: true);
    couponProvider = Provider.of<CouponProvider>(context, listen: true);
    personnelProvider = Provider.of<PersonnelProvider>(context, listen: true);
    PageState? pageState;
    if (widget.index == 0) {
      pageState = couponProvider.pageState;
    } else if (widget.index == 3) {
      pageState = couponProvider.pageStateStore;
    } else if (widget.index == 4) {
      pageState = couponProvider.pageStateMine;
    }
    return Container(
      child: Consumer<CouponProvider>(builder: (context, model, _) {
        if (pageState != PageState.Success) {
          return ExceptionPage(
            pageState: pageState,
            callback: () {
              // offset = 0;
              // getMessage(showLoading: true);

              if (pageState == PageState.Empty) {
                NavigatorUtil.goCouponHistoryPage(context, widget.index);
              } else {
                _couponNetworkData(widget.index);
              }
            },
            emptyMsg: "暂时没有列表信息哦",
            emptyImg: "empty_search",
            showMsg: "加载中,请稍候...",
            showText: '查看过期优惠券',
          );
        } else {
          return EasyRefresh.custom(
            controller: _controller,
            shrinkWrap: true,
            slivers: [
              SliverList(
                delegate: SliverChildBuilderDelegate(
                    (BuildContext context, int index) {
                  return CouponItemF(
                    from: 'quan',
                    couponSonModel: couponProvider.couponList![index],
                    showBtn: true,
                    onPressedSwich: () {
                      couponProvider.couponList![index].isOpenBool =
                          !couponProvider.couponList![index].isOpenBool;
                      _setCustomerActivity(index);
                    },
                    onPressed: () {
                      NavigatorUtil.goCouponDetailPage(
                          context, couponProvider.couponList![index],
                          idStr: couponProvider.couponList![index].id);
                    },
                  );
                }, childCount: couponProvider.couponList!.length),
              ),
              SliverList(
                delegate: SliverChildBuilderDelegate(
                    (BuildContext context, int index) {
                  return Column(
                    children: [
                      InkWell(
                          onTap: () {
                            NavigatorUtil.goCouponHistoryPage(
                                context, widget.index);
                          },
                          child: RichText(
                              text: TextSpan(
                                  style: TextStyle(
                                    fontSize: ScreenUtil().setSp(28),
                                  ),
                                  children: [
                                TextSpan(
                                    text: '没有更多了,',
                                    style: TextStyle(
                                        color: MyColours.color_000000)),
                                TextSpan(
                                    text: '查看过期优惠券',
                                    style: TextStyle(
                                        color: MyColours.color_438E93)),
                              ]))),
                      VEmptyView(80)
                    ],
                  );
                }, childCount: 1),
              )
            ],
            // onRefresh: () async {
            //   // offset = 0;
            //   // getMessage(showLoading: false);
            // },
            // onLoad: () async {
            //   // offset++;
            //   // getMessage(showLoading: false);
            // },
          );
        }
      }),
    );
  }
}