import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:aslan/app_localizations.dart'; import 'package:aslan/chatvibe_ui/components/at_compontent.dart'; import 'package:aslan/chatvibe_ui/components/at_tts.dart'; import 'package:aslan/chatvibe_core/utilities/at_date_utils.dart'; import 'package:aslan/chatvibe_core/utilities/at_string_utils.dart'; import 'package:aslan/chatvibe_data/sources/local/user_manager.dart'; import 'package:aslan/chatvibe_data/sources/repositories/store_repository_imp.dart'; import 'package:aslan/chatvibe_domain/models/res/vip_list_res.dart'; import 'package:aslan/chatvibe_managers/rtc_manager.dart'; import 'package:provider/provider.dart'; import 'package:aslan/chatvibe_core/constants/at_global_config.dart'; import 'package:aslan/chatvibe_ui/components/dialog/dialog_base.dart'; import 'package:aslan/chatvibe_ui/components/text/at_text.dart'; import 'package:aslan/chatvibe_core/utilities/at_loading_manager.dart'; import 'package:aslan/chatvibe_managers/user_profile_manager.dart'; import '../../../chatvibe_data/models/enum/at_currency_type.dart'; import '../../../chatvibe_data/models/enum/at_props_type.dart'; class VipItemPage extends StatefulWidget { VipListRes vip; int index; VipItemPage(this.vip, this.index); @override _VipItemPageState createState() => _VipItemPageState(); } class _VipItemPageState extends State with SingleTickerProviderStateMixin { bool hasCurrentVip = false; @override void initState() { super.initState(); var res = AccountStorage().getCurrentUser()?.userProfile?.getVIP(); if (res != null) { if (res.id == widget.vip.propsResources?.id) { hasCurrentVip = true; } } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.transparent, body: Column( children: [ SizedBox(height: 20.w), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( width: 138.w, height: 138.w, ATGlobalConfig.businessLogicStrategy.getVipPageLargeIcon( widget.index, ), ), ], ), SizedBox(height: 20.w), SizedBox( width: ScreenUtil().screenWidth, height: 100.w, child: ListView.separated( shrinkWrap: true, scrollDirection: Axis.horizontal, itemBuilder: (context, i) => _buildPrivilegeItem2(i), itemCount: 9, padding: EdgeInsets.zero, separatorBuilder: (context, i) => Container(width: 8.w), ), ), SizedBox(height: 15.w), Expanded( child: SingleChildScrollView( child: Column( children: [ Stack( alignment: Alignment.topCenter, children: [ widget.index < 6 ? Image.asset( ATGlobalConfig.businessLogicStrategy .getVipPageBackgroundImage(widget.index), width: ScreenUtil().screenWidth * 0.95, ) : Container(), Padding( padding: EdgeInsetsDirectional.symmetric( horizontal: 15.w, ), child: Column( children: [ SizedBox(height: 42.w), Row( children: [ Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig.businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'badge', ), ATAppLocalizations.of(context)!.vipBadge, ), onTap: () { _clickBadge(); }, ), ), Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig.businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'profile_frame', ), ATAppLocalizations.of( context, )!.vipProfileFrame, ), onTap: () { _clickProfileFrame(); }, ), ), Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig.businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'profile_card', ), ATAppLocalizations.of( context, )!.vipProfileCard, ), onTap: () { _clickProfileCard(); }, ), ), ], ), SizedBox(height: 15.w), Row( children: [ Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig.businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'mic_rippl', ), ATAppLocalizations.of( context, )!.vipMicSoundWave, ), onTap: () { _clickRoomSeat(); }, ), ), Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig.businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'entrance_effect', ), ATAppLocalizations.of( context, )!.vipEntranceEffect, ), onTap: () { _clickEntranceEffect(); }, ), ), Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig.businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'chatbox', ), ATAppLocalizations.of( context, )!.vipChatBox, ), onTap: () { _clickChatBox(); }, ), ), ], ), SizedBox(height: 15.w), Row( children: [ Expanded( child: widget.index > 2 ? Expanded( child: GestureDetector( child: _buildItem( ATGlobalConfig .businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'special_gift_tassel', ), ATAppLocalizations.of( context, )!.vipSpecialGiftTassel, ), onTap: () { _clickSpecialGiftTassel(); }, ), ) : Spacer(), ), Expanded( child: widget.index > 2 ? GestureDetector( child: _buildItem( ATGlobalConfig .businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'exclusive_vehicles', ), ATAppLocalizations.of( context, )!.vipExclusiveVehicles, ), onTap: () { _clickExclusiveVehicles(); }, ) : Spacer(), ), Expanded( child: widget.index > 3 ? GestureDetector( child: _buildItem( ATGlobalConfig .businessLogicStrategy .getVipPageFeatureIcon( widget.index, 'rippl_theme', ), ATAppLocalizations.of( context, )!.vipRippleTheme, ), onTap: () { _clickRoomCoverBorder(); }, ) : Spacer(), ), ], ), ], ), ), ], ), ], ), ), ), widget.index < 6 ? Container( height: 68.w, padding: EdgeInsets.symmetric(horizontal: 15.w), decoration: BoxDecoration( image: DecorationImage( image: AssetImage( ATGlobalConfig.businessLogicStrategy .getVipPagePurchaseBackgroundImage(widget.index), ), fit: BoxFit.fill, ), ), child: Row( children: [ Expanded( child: Consumer( builder: (context, ref, child) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( mainAxisSize: hasCurrentVip ? MainAxisSize.max : MainAxisSize.min, children: [ Expanded( child: text( "${widget.vip.propsPrices?.first.amount}${ATAppLocalizations.of(context)!.coins}/${widget.vip.propsPrices?.first.days} ${ATAppLocalizations.of(context)!.days}", fontSize: hasCurrentVip ? 13.sp : 15.sp, fontWeight: FontWeight.bold, maxLines: 2, lineHeight: 1.0, textColor: ATGlobalConfig .businessLogicStrategy .getVipPageTextColor( widget.index, true, ), ), ), ], ), hasCurrentVip ? text( maxLines: 2, ATAppLocalizations.of( context, )!.yourVipWillExpire( ATMDateUtils.formatDateTime3( DateTime.fromMillisecondsSinceEpoch( int.parse( AccountStorage().getVIPExpireTime(), ), ), ), ), fontSize: 12.sp, lineHeight: 1.0, fontWeight: FontWeight.bold, textColor: ATGlobalConfig .businessLogicStrategy .getVipPageTextColor( widget.index, true, ), ) : Container(), ], ); }, ), ), GestureDetector( child: Container( margin: EdgeInsets.only(top: 2.w), width: 115.w, height: 38.w, alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( ATGlobalConfig.businessLogicStrategy .getVipPagePurchaseButtonImage(), ), fit: BoxFit.fill, ), ), child: text( maxLines: 2, textAlign: TextAlign.center, hasCurrentVip ? ATAppLocalizations.of(context)!.renewVip : ATAppLocalizations.of(context)!.buyVip, fontWeight: FontWeight.bold, lineHeight: 1.0, fontSize: 12.sp, textColor: Colors.white, ), ), onTap: () { SmartDialog.show( tag: "showConfirmDialog", alignment: Alignment.center, debounce: true, animationType: SmartAnimationType.fade, builder: (_) { return MsgDialog( title: ATAppLocalizations.of(context)!.tips, msg: ATAppLocalizations.of( context, )!.confirmBuyTips, btnText: ATAppLocalizations.of(context)!.confirm, onEnsure: () { _buy(); }, ); }, ); // if (hasCurrentVip) { // ATTts.show(ATAppLocalizations.of(context)!.cantBuyVip); // } else { // // } }, ), ], ), ) : Container(), ], ), ); } Widget _buildItem(String icon, String tx) { return Container( height: 144.w, child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ Container( width: 101.w, height: 101.w, padding: EdgeInsets.all(10.w), decoration: BoxDecoration( image: DecorationImage( image: AssetImage( ATGlobalConfig.businessLogicStrategy .getVipPageItemBackgroundImage(widget.index), ), fit: BoxFit.fill, ), ), child: ATStringUtils.isUrl(icon) ? netImage(url: icon) : Image.asset(icon, fit: BoxFit.contain), ), SizedBox(height: 5.w), SizedBox( width: 100.w, child: text( textAlign: TextAlign.center, tx, lineHeight: 0.9, maxLines: 3, textColor: ATGlobalConfig.businessLogicStrategy .getVipPageTextColor(widget.index, true), fontSize: 13.sp, fontWeight: FontWeight.w600, ), ), ], ), ); } _buildPrivilegeItem2(int index) { String icon = ""; String tx = ""; bool isSelected = false; if (index == 0) { isSelected = true; icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 1, isSelected, ); tx = "${widget.vip.nobleVipAbility?.loginRewardsAmount?.ceil()}${ATAppLocalizations.of(context)!.coins}/${ATAppLocalizations.of(context)!.day}"; } else if (index == 1) { isSelected = true; icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 2, isSelected, ); tx = ATAppLocalizations.of(context)!.userColoredID; } else if (index == 2) { if (widget.index > 1) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 3, widget.index > 1, ); tx = ATAppLocalizations.of(context)!.userLevelXPBoost( widget.index == 1 ? "+0%" : (widget.index == 2 ? "+7%" : (widget.index == 3 ? "+10%" : (widget.index == 4 ? "+15%" : widget.index == 5 ? "+20%" : "+25%"))), ); } else if (index == 3) { if (widget.index > 1) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 4, isSelected, ); tx = ATAppLocalizations.of(context)!.gifProfileUpload; } else if (index == 4) { if (widget.index > 2) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 5, isSelected, ); tx = ATAppLocalizations.of(context)!.dailyTaskRewardBonus( widget.index == 1 ? "+0%" : (widget.index == 2 ? "+7%" : (widget.index == 3 ? "+10%" : (widget.index == 4 ? "+15%" : widget.index == 5 ? "+20%" : "+25%"))), ); } else if (index == 5) { if (widget.index > 2) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 6, isSelected, ); tx = ATAppLocalizations.of(context)!.membershipFreeChatSpeak; } else if (index == 6) { if (widget.index > 3) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 7, isSelected, ); tx = ATAppLocalizations.of(context)!.antiBlock; } else if (index == 7) { if (widget.index > 4) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 8, isSelected, ); tx = ATAppLocalizations.of(context)!.vipBirthdayGift; } else if (index == 8) { if (widget.index > 4) { isSelected = true; } icon = ATGlobalConfig.businessLogicStrategy.getVipPagePrivilegeIcon( widget.index, 9, isSelected, ); tx = ATAppLocalizations.of(context)!.kickPrevention; } return SizedBox( height: 100.w, child: Column( children: [ Image.asset(icon, width: 60.w, height: 60.w, fit: BoxFit.contain), SizedBox(height: 2.w), SizedBox( width: 110.w, child: text( textAlign: TextAlign.center, tx, lineHeight: 0.9, maxLines: 3, textColor: ATGlobalConfig.businessLogicStrategy .getVipPageTextColor(widget.index, isSelected), fontSize: 11.sp, fontWeight: FontWeight.w600, ), ), ], ), ); } void _clickBadge() { // SmartDialog.show( // tag: "showBadge", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // width: ScreenUtil().screenWidth, // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'badge', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickProfileFrame() { // SmartDialog.show( // tag: "showProfileFrame", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'profile_frame', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickProfileCard() { // SmartDialog.show( // tag: "showProfileCard", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'profile_card', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickEntranceEffect() { // SmartDialog.show( // tag: "showEntranceEffect", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'entrance_effect', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickSpecialGiftTassel() { // SmartDialog.show( // tag: "showSpecialGiftTassel", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'special_gift_tassel', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickRoomCoverBorder() { // SmartDialog.show( // tag: "showRoomCoverBorder", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'room_cover_headdress', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickRoomSeat() { // SmartDialog.show( // tag: "showRoomSeat", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'mic_rippl_theme', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickChatBox() { // SmartDialog.show( // tag: "showChatBox", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'pre', // 'chatbox', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _clickExclusiveVehicles() { // SmartDialog.show( // tag: "showExclusiveVehicles", // alignment: Alignment.center, // animationType: SmartAnimationType.fade, // builder: (_) { // return SafeArea( // top: false, // child: Container( // height: 280.w, // margin: EdgeInsets.symmetric(horizontal: 20.w), // decoration: BoxDecoration( // image: DecorationImage( // image: AssetImage( // ATGlobalConfig.businessLogicStrategy.getVipPagePreviewImage( // widget.index, // 'rev', // 'exclusive_vehicles', // ), // ), // fit: BoxFit.fill, // ), // ), // ), // ); // }, // ); } void _buy() { ATLoadingManager.exhibitOperation(context: context); StoreRepositoryImp() .storePurchasing( widget.vip.id ?? "", ATPropsType.NOBLE_VIP.name, ATCurrencyType.GOLD.name, "${widget.vip.propsPrices?.first.days}", ) .then((value) { ATTts.show(ATAppLocalizations.of(context)!.operationSuccessful); Provider.of( context, listen: false, ).getMyUserInfo(needLoadUserCountGuard: false); Provider.of(context, listen: false).needUpDataUserInfo = true; hasCurrentVip = true; Provider.of( context, listen: false, ).updateBalance(value); setState(() {}); ATLoadingManager.veilRoutine(); }) .catchError((e) { ATLoadingManager.veilRoutine(); }); } }