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/vip_card.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/custom_image.dart'; import 'package:huixiang/view_widget/my_footer.dart'; import 'package:huixiang/view_widget/no_data_view.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 VipCardPage extends StatefulWidget { @override State createState() { return _VipCardPage(); } } class _VipCardPage extends State { RefreshController _refreshController; ApiService apiService; @override void initState() { super.initState(); _refreshController = RefreshController(); SharedPreferences.getInstance().then((value) { apiService = ApiService(Dio(), context: context, token: value.getString("token")); queryVipCard(); }); } List coupons = []; queryVipCard() async { BaseData> baseData = await apiService.vipList({}).catchError((error) { _refreshController.refreshFailed(); }); if (baseData != null && baseData.isSuccess) { coupons.clear(); coupons.addAll(baseData.data); setState(() { _refreshController.refreshCompleted(); }); } else { _refreshController.refreshFailed(); } } @override Widget build(BuildContext context) { return Scaffold( body: Container( child: SmartRefresher( enablePullDown: true, enablePullUp: false, header: MyHeader(), footer: CustomFooter( builder: (context, mode) { return MyFooter(mode); }, ), controller: _refreshController, onRefresh: queryVipCard, physics: BouncingScrollPhysics(), child: (coupons != null && coupons.length > 0) ? ListView.builder( padding: EdgeInsets.symmetric(vertical: 8.h), itemBuilder: (context, position) { return GestureDetector( onTap: () { Navigator.of(context).pushNamed( '/router/vip_details_page', arguments: {"id": coupons[position].id}); }, child: vipCardItem(coupons[position]), ); }, itemCount: coupons != null ? coupons.length : 0, ) : NoDataView( src: "assets/image/icon_empty.webp", isShowBtn: false, text: "还没有会员卡~", fontSize: 16.sp, margin: EdgeInsets.only(top: 120.h), ), ), ), ); } String assetsByName(String storeName) { if (storeName == null) return "assets/image/icon_vip_bj.webp"; if (storeName.contains("百年川椒") || storeName.contains("百年川椒")) { return "assets/image/icon_vip_bj.webp"; } else if (storeName.contains("海峡姐妹") || storeName.contains("海峽姐妹")) { return "assets/image/icon_milk_tea_bg.webp"; } else if (storeName.contains("前进麦味") || storeName.contains("前進麥味")) { return "assets/image/icon_bread_bg.webp"; } return "assets/image/icon_vip_bj.webp"; } Widget vipCardItem(VipCard vipCard) { return Container( margin: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8.w), color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ) ], ), child: Stack( children: [ Positioned( child: ClipRRect( borderRadius: BorderRadius.circular(8.w), child: Image.asset( assetsByName(vipCard.tenantName), fit: BoxFit.cover, //填充剩余空间 height: 170.h, ), ), top: 0, left: 0, right: 0, bottom: 0, ), Container( padding: EdgeInsets.all(16.w), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ MImage( (vipCard?.storeList?.length ?? 0) > 0 ? vipCard.storeList[0].logo : "", width: 54, height: 54, fit: BoxFit.cover, radius: BorderRadius.circular(4), errorSrc: "assets/image/default_1.webp", fadeSrc: "assets/image/default_1.webp", ), SizedBox( width: 12.w, ), Expanded( child: Container( // height: 54.h, child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Text( vipCard.tenantName ?? "", overflow: TextOverflow.ellipsis, maxLines: 1, style: TextStyle( fontSize: 20.sp, fontWeight: FontWeight.bold, color: Colors.black, ), ), flex: 1, ), Image.asset( "assets/image/icon_vip.webp", ), ], ), Text.rich( TextSpan( children: [ TextSpan( text: S.of(context).huiyuanka, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.medium, color: Colors.black, ), ), ], ), textDirection: TextDirection.ltr, ), ], ), ), flex: 1, ) ], ), SizedBox(height: 50.h), Row( textDirection: TextDirection.rtl, children: [ Icon( Icons.chevron_right, color: Colors.black, size: 24, ), Text.rich( TextSpan( children: [ TextSpan( text: S.of(context).chakanxiangqing, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.semi_bold, color: Colors.black, ), ), ], ), ), ], ), SizedBox( height: 10.h, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 1, child: Text.rich( TextSpan( children: [ TextSpan( text: "No.${vipCard.id}", style: TextStyle( fontSize: 14.sp, fontWeight: MyFontWeight.regular, color: Colors.black, ), ), ], ), ), ), Text.rich( TextSpan( children: [ TextSpan( text: S.of(context).youxiaoqixian, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, color: Color(0Xff353535), ), ), ], ), ), Text.rich( TextSpan( children: [ TextSpan( text: S.of(context).changqiyouxiao, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, color: Color(0Xff353535), ), ), ], ), ), ], ), ], ), ), ], ), ); } }