import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/coupon.dart'; import 'package:huixiang/retrofit/data/page.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/my_footer.dart'; import 'package:huixiang/view_widget/new_coupon_widget.dart'; import 'package:huixiang/view_widget/no_data_view.dart'; import 'package:huixiang/view_widget/receive_success.dart'; import 'package:huixiang/view_widget/selector_store_dialog.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class CouponsPage extends StatefulWidget { @override State createState() { return _CouponsPage(); } } class _CouponsPage extends State { ApiService apiService; RefreshController _refreshController; @override void dispose() { super.dispose(); _refreshController.dispose(); } @override void initState() { super.initState(); SharedPreferences.getInstance().then((value) { apiService = ApiService(Dio(), context: context, token: value.getString('token')); queryCard(); }); _refreshController = RefreshController(initialRefresh: false); } List coupons = []; int pageNum = 1; int state = 1; _onRefresh() async { pageNum = 1; queryCard(); } queryCard() async { BaseData> baseData = await apiService.queryCard({ "centre": true, "pageNum": pageNum, "pageSize": 10, "searchKey": "", "state": state }).catchError((error) { _refreshController.loadFailed(); _refreshController.refreshFailed(); }); if (baseData != null && baseData.isSuccess) { if (pageNum == 1) { coupons.clear(); } coupons.addAll(baseData.data.list); setState(() { _refreshController.refreshCompleted(); _refreshController.loadComplete(); if (baseData.data.pageNum == baseData.data.pages) { _refreshController.loadNoData(); } else { pageNum += 1; } }); } else { _refreshController.loadFailed(); _refreshController.refreshFailed(); } } @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ Row( children: [ Container( width: 68.w, height: 26.h, alignment: Alignment.center, margin: EdgeInsets.only( left: 16.w, right: 12.w, top: 10.h, bottom: 14.h,), decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: state == 1 ? Colors.white : Color(0xffE5E5E5), ), child: GestureDetector( onTap: () { setState(() { state = 1; _onRefresh(); }); }, child: Text( S.of(context).keyongquan, style: TextStyle( fontSize: 14.sp, fontWeight: state == 1 ? FontWeight.bold : FontWeight.normal, color: state == 1 ? Colors.black : Color(0xff727272), ), ), ), ), Container( width: 68.w, height: 26.h, alignment: Alignment.center, margin: EdgeInsets.only(left: 16.w, top: 10.h, bottom: 14.h), decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: state == 3 ? Colors.white : Color(0xffE5E5E5), ), child: GestureDetector( onTap: () { setState(() { state = 3; _onRefresh(); }); }, child: Text( S.of(context).shixiaoquan, style: TextStyle( fontSize: 14.sp, fontWeight: state == 3 ? FontWeight.bold : FontWeight.normal, color: state == 3 ? Colors.black : Color(0xff727272), ), ), ), ), ], ), Expanded( child: SmartRefresher( controller: _refreshController, enablePullDown: true, enablePullUp: true, physics: BouncingScrollPhysics(), header: MyHeader(), footer: CustomFooter( builder: (context, mode) { return MyFooter(mode); }, ), onRefresh: _onRefresh, onLoading: queryCard, child: (coupons != null && coupons.length > 0) ? ListView.builder( itemBuilder: (context, position) { return GestureDetector( child: NewCouponWidget( coupons[position], (type) { if (type == 1) { receiveCoupon(coupons[position].id); } else { if (coupons[position].bizType == 5 || coupons[position].bizType == 3) { Navigator.of(context).pushNamed( '/router/write_off_page', arguments: { "couponId": coupons[position].id, "coupon": jsonEncode(coupons[position]), }).then((value) { _onRefresh(); }); } else { showStoreSelector(coupons[position].storeList); } } }, () { setState(() { coupons[position].isEx = !coupons[position].isEx; }); }, type: 0, ), ); }, itemCount: coupons != null ? coupons.length : 0, ) : NoDataView( src:"assets/image/ka.png", isShowBtn: false, text: "你还没有券~", fontSize: 16.sp, margin: EdgeInsets.only(top: 120.h), ), ), ), ], ), ); } receiveCoupon(couponId) async { BaseData baseData = await apiService.receiveCoupon(couponId).catchError((onError) {}); if (baseData != null && baseData.isSuccess) { _onRefresh(); showAlertDialog(); } } ///选择店铺使用 showStoreSelector(storeList) { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, builder: (context) { return SelectorStoreWidget(storeList); }); } showAlertDialog() { //显示对话框 showDialog( context: context, builder: (BuildContext context) { return ReceiveSuccess(); }, ); } }