import 'dart:convert'; import 'package:barcode_widget/barcode_widget.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.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/coupon_detail.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/separator.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../view_widget/classic_header.dart'; import '../view_widget/my_footer.dart'; class WriteOffPage extends StatefulWidget { final arguments; WriteOffPage({this.arguments}); @override State createState() { return _WriteOffPage(); } } class _WriteOffPage extends State { dynamic coupon; ApiService apiService; CouponDetail queryCoupon; final RefreshController refreshController = RefreshController(); @override void initState() { super.initState(); coupon = jsonDecode(widget.arguments["coupon"]); if (mounted) setState(() {}); queryCouponDetail(coupon["memberCouponId"]); } ///查询核销券状态/查询优惠券详情 queryCouponDetail(memberCouponId) async { if (apiService == null) { SharedPreferences value = await SharedPreferences.getInstance(); apiService = ApiService( Dio(), context: context, token: value.getString("token"), ); } BaseData baseData = await apiService.couponDetail(memberCouponId); if (baseData != null && baseData.isSuccess) { setState(() { queryCoupon = baseData.data; if(queryCoupon.status==2){ Navigator.of(context).pop(true); } else Future.delayed(Duration(seconds: 1), () { queryCouponDetail(coupon["memberCouponId"]); }); }); } else { SmartDialog.showToast(baseData.msg, alignment: Alignment.center); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xFF32A060), appBar: MyAppBar( title: S.of(context).hexiaomaxiangqing, titleSize: 18.sp, titleColor: Colors.white, background: Color(0xFF32A060), leadingColor: Colors.white, ), body: SmartRefresher( controller: refreshController, enablePullDown: false, enablePullUp: false, header: MyHeader(), footer: CustomFooter( builder: (context, mode) { return MyFooter(mode); }, ), physics: BouncingScrollPhysics(), scrollController: ScrollController(), child: Container( child: SingleChildScrollView( physics: BouncingScrollPhysics(), child: Column( children: [ Container( alignment: Alignment.topCenter, // height: 530.h, height:470.h, child: Stack( alignment: Alignment.topCenter, children: [ Image.asset( "assets/image/write_off_bg.webp", width: MediaQuery.of(context).size.width * 0.912, // height: 540.h, height: 480.h, fit: BoxFit.fill, ), LayoutBuilder(builder: (context, constraints) { return Container( alignment: Alignment.center, width: constraints.constrainWidth() * 0.912, padding:EdgeInsets.only(top: 24.h), child: Column( children: [ Container( child: Column( children: [ Text( coupon != null ? coupon["couponName"] : "", style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold, color: Color(0xFF353535)), ), SizedBox( height:11.h, ), Text( (coupon["useStartTime"] == null || coupon["useEndTime"] == null) ? "" : S.of(context).youxiaoqi( "${coupon["useStartTime"].replaceAll("-", ".").split(" ")[0]}-${coupon["useEndTime"].replaceAll("-", ".").split(" ")[0]}"), style: TextStyle( fontSize: 12.sp, color: Color(0xFF353535), ), ), ], mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, ), alignment: Alignment.center, ), Container( margin: EdgeInsets.only(left: 20.w, right: 20.w,top:16.h,bottom:30.h), child: MySeparator( width: 5.w, height: 1.h, color: Color(0xFFA29E9E), ), ), Expanded( child: Container( alignment: Alignment.center, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ // Text( // coupon != null // ? "${coupon["memberCouponId"].substring(0, 4)} " // "${coupon["memberCouponId"].substring(4, 8)} " // "${coupon["memberCouponId"].substring(8, 12)} " // "${coupon["memberCouponId"].substring(12, 16)} " // "${coupon["memberCouponId"].substring(16, coupon["memberCouponId"].length)}" // : "", // style: TextStyle( // fontSize: 14.sp, // wordSpacing: coupon == null // ? 10 // : (MediaQuery.of(context).size.width - // 64.w) / // (((coupon["memberCouponId"].length) * 4)), // letterSpacing: coupon == null // ? 8 // : (MediaQuery.of(context).size.width - // 64.w) / // (((coupon["memberCouponId"].length) * 4)), // fontWeight: MyFontWeight.semi_bold, // color: Color(0xFF353535), // ), // ), // SizedBox( // height: 15.h, // ), // BarcodeWidget( // barcode: Barcode.code128(useCode128C: true), // data: coupon != null ? coupon["memberCouponId"] : "", // height: 72.h, // color: Colors.black, // drawText: false, // ), SizedBox( height: 16.h, ), Expanded(child: QrImage( data: "{\"type\":\"wiped\",\"memberCouponId\":\"${coupon["memberCouponId"]}\"}", version: QrVersions.auto, size: 250.w, gapless: true, ),), SizedBox( height: 35.h, ), ], ), margin: EdgeInsets.symmetric(horizontal: 20.w), ), flex: 27, ), Container( child: MySeparator( width: 5.w, height: 1.h, color: Color(0xFFA29E9E), ), margin: EdgeInsets.only(left: 20.w, right: 20.w,bottom:20.h), ), ], ), ); }), //原版本样式 // LayoutBuilder(builder: (context, constraints) { // return Container( // width: constraints.constrainWidth() * 0.912, // child: Column( // children: [ // Expanded( // child: Container( // child: Column( // children: [ // Text( // coupon != null ? coupon["couponName"] : "", // style: TextStyle( // fontSize: 16.sp, // fontWeight: FontWeight.bold, // color: Color(0xFF353535)), // ), // SizedBox( // height: 8.h, // ), // Text( // (coupon["useStartTime"] == null || coupon["useEndTime"] == null) ? "" : S.of(context).youxiaoqi( // "${coupon["useStartTime"].replaceAll("-", ".").split(" ")[0]}-${coupon["useEndTime"].replaceAll("-", ".").split(" ")[0]}"), // style: TextStyle( // fontSize: 12.sp, // color: Color(0xFF353535), // ), // ), // ], // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, // ), // alignment: Alignment.center, // ), // flex: 6, // ), // Container( // margin: EdgeInsets.only(left: 20.w, right: 20.w), // child: MySeparator( // width: 5.w, // height: 1.h, // color: Color(0xFFA29E9E), // ), // ), // Expanded( // child: Container( // alignment: Alignment.center, // child: Column( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // SizedBox(height: 5.h,), // Text( // coupon != null // ? "${coupon["memberCouponId"].substring(0, 4)} " // "${coupon["memberCouponId"].substring(4, 8)} " // "${coupon["memberCouponId"].substring(8, 12)} " // "${coupon["memberCouponId"].substring(12, 16)} " // "${coupon["memberCouponId"].substring(16, coupon["memberCouponId"].length)}" // : "", // style: TextStyle( // fontSize: 14.sp, // wordSpacing: coupon == null // ? 10 // : (MediaQuery.of(context).size.width - // 64.w) / // (((coupon["memberCouponId"].length) * 4)), // letterSpacing: coupon == null // ? 8 // : (MediaQuery.of(context).size.width - // 64.w) / // (((coupon["memberCouponId"].length) * 4)), // fontWeight: MyFontWeight.semi_bold, // color: Color(0xFF353535), // ), // ), // SizedBox( // height: 12.h, // ), // BarcodeWidget( // barcode: Barcode.code128(useCode128C: true), // data: coupon != null ? coupon["memberCouponId"] : "", // height: 72.h, // color: Colors.black, // drawText: false, // ), // SizedBox( // height: 16.h, // ), // Expanded(child: QrImage( // data: "{\"type\":\"wiped\",\"memberCouponId\":\"${coupon["memberCouponId"]}\"}", // version: QrVersions.auto, // size: 200.w, // gapless: true, // ),), // SizedBox( // height: 35.h, // ), // ], // ), // margin: EdgeInsets.symmetric(horizontal: 20.w), // ), // flex: 27, // ), // Container( // child: MySeparator( // width: 5.w, // height: 1.h, // color: Color(0xFFA29E9E), // ), // margin: EdgeInsets.only(left: 20.w, right: 20.w), // ), // Expanded( // child: Container( // padding: EdgeInsets.fromLTRB(20.w, 15.h, 20.w, 15.h), // child: Column( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Container( // width: 3.w, // height: 15.h, // margin: // EdgeInsets.fromLTRB(4.w, 7.h, 4.w, 7.h), // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(3), // color: Color(0xFF20662A), // ), // ), // Text( // S.of(context).shiyongtiaojian, // style: TextStyle( // fontWeight: FontWeight.bold, // fontSize: 14.sp, // color: Color(0xFF353535), // ), // ), // ], // ), // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // SizedBox( // width: 11.w, // ), // Expanded( // child: Text( // S // .of(context) // .qianwanghuixiangmendianduihuanhexiao, // style: TextStyle( // textBaseline: TextBaseline.alphabetic, // fontSize: 14.sp, // color: Color(0xFF353535)), // ), // flex: 1, // ), // ], // ), // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Container( // width: 3.w, // height: 15.h, // margin: EdgeInsets.fromLTRB(4, 7, 4, 7), // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(3), // color: Color(0xFF20662A), // ), // ), // Text( // S.of(context).shiyongshuoming, // style: TextStyle( // fontWeight: FontWeight.bold, // fontSize: 14.sp, // color: Color(0xFF353535)), // ), // ], // ), // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // SizedBox( // width: 11.w, // ), // Text( // S.of(context).zitiduihuanquan, // style: TextStyle( // textBaseline: TextBaseline.alphabetic, // fontSize: 14.sp, // color: Color(0xFF353535), // ), // ), // ], // ), // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // SizedBox( // width: 11.w, // ), // Text( // S.of(context).huixiangrenyimendian, // style: TextStyle( // textBaseline: TextBaseline.alphabetic, // fontSize: 14.sp, // color: Color(0xFF353535), // ), // ), // ], // ), // ], // ), // ), // flex: 13, // ), // Expanded( // child: Container(), // flex: 3, // ), // ], // ), // ); // }) ], ), ), Container( width: MediaQuery.of(context).size.width * 0.912, padding: EdgeInsets.only(left:18.w, bottom:15.h, right:18.w), margin:EdgeInsets.only(bottom: 21.h), decoration: BoxDecoration( borderRadius: BorderRadius.only( bottomLeft: Radius.circular(6), bottomRight: Radius.circular(6),), color: Colors.white, boxShadow: [ BoxShadow( color: Color(0x08213303).withAlpha(12), offset: Offset(0, 2), blurRadius: 3, spreadRadius: 0, ), ], ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Container( // width: 3.w, // height: 15.h, // margin: // EdgeInsets.fromLTRB(4.w, 7.h, 4.w, 7.h), // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(3), // color: Color(0xFF20662A), // ), // ), // Text( // S.of(context).shiyongtiaojian, // style: TextStyle( // fontWeight: FontWeight.bold, // fontSize: 14.sp, // color: Color(0xFF353535), // ), // ), // ], // ), // SizedBox(height:12.h,), // Row( // mainAxisAlignment: MainAxisAlignment.start, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // SizedBox( // width: 11.w, // ), // Expanded( // child: Text( // S // .of(context) // .qianwanghuixiangmendianduihuanhexiao, // style: TextStyle( // textBaseline: TextBaseline.alphabetic, // fontSize: 14.sp, // height: 1.5.h, // color: Color(0xFF353535)), // ), // flex: 1, // ), // ], // ), SizedBox(height:12.h,), Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( width: 3.w, height: 15.h, margin: EdgeInsets.fromLTRB(4.w, 7.h, 4.w, 7.h), decoration: BoxDecoration( borderRadius: BorderRadius.circular(3), color: Color(0xFF20662A), ), ), Text( S.of(context).shiyongshuoming, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 14.sp, color: Color(0xFF353535)), ), ], ), Container( child: Html( data: coupon != null ? coupon["remark"] : "", customImageRenders: { networkSourceMatcher(): networkImageRender( loadingWidget: () { return Container(); }, ), }, ), ) ], ), ) ], ), ), ), ), ); } }