import 'package:flutter/material.dart'; import 'package:velocity_x/velocity_x.dart'; import 'package:recook/constants/constants.dart'; import 'package:recook/constants/header.dart'; import 'package:recook/pages/user/benefit_view_gen.dart'; import 'package:recook/pages/user/functions/user_benefit_func.dart'; import 'package:recook/pages/user/model/user_benefit_common_model.dart'; import 'package:recook/pages/user/user_benefit_sub_page.dart'; import 'package:recook/utils/custom_route.dart'; import 'package:recook/utils/user_level_tool.dart'; import 'package:recook/widgets/custom_image_button.dart'; import 'package:recook/widgets/custom_painters/round_background_painter.dart'; import 'package:recook/widgets/recook_back_button.dart'; import 'package:recook/widgets/recook_indicator.dart'; class UserBenefitPage extends StatefulWidget { UserBenefitPage({Key key}) : super(key: key); @override _UserBenefitPageState createState() => _UserBenefitPageState(); } class _UserBenefitPageState extends State with TickerProviderStateMixin { List tabs = ['今日', '昨日', '本月', '上月']; TabController _tabController; UserBenefitCommonModel _displayModel = UserBenefitCommonModel.zero(); UserBenefitCommonModel _todayModel = UserBenefitCommonModel.zero(); UserBenefitCommonModel _yestodayModel = UserBenefitCommonModel.zero(); UserBenefitCommonModel _thisMonthModel = UserBenefitCommonModel.zero(); UserBenefitCommonModel _lastMonthModel = UserBenefitCommonModel.zero(); UserRoleLevel get _role => UserLevelTool.currentRoleLevelEnum(); bool get _purchaseShow => true; bool get _guideShow => _role != UserRoleLevel.None && _role != UserRoleLevel.Vip; bool get _teamShow => _role != UserRoleLevel.None && _role != UserRoleLevel.Vip; bool get _recommendShow => _role == UserRoleLevel.Diamond_1 || _role == UserRoleLevel.Diamond_2; bool get _rewardShow => _role == UserRoleLevel.Diamond_1; Future getData() async { await Future.delayed(Duration(milliseconds: 300)); GSDialog.of(context).showLoadingDialog(context, '加载中'); _todayModel = await UserBenefitFunc.getCommonModel( BenefitDateType.DAY, DateTime.now(), ); _yestodayModel = await UserBenefitFunc.getCommonModel( BenefitDateType.DAY, DateTime.now().subtract(Duration(days: 1)), ); _thisMonthModel = await UserBenefitFunc.getCommonModel( BenefitDateType.MONTH, DateTime.now(), ); _lastMonthModel = await UserBenefitFunc.getCommonModel( BenefitDateType.MONTH, DateTime(DateTime.now().year, DateTime.now().month - 1), ); _displayModel = _todayModel; GSDialog.of(context).dismiss(context); setState(() {}); } Widget _buildTabView(int index) { double allCount = 0; switch (index) { case 0: allCount = _todayModel.allAmount; break; case 1: allCount = _yestodayModel.allAmount; break; case 2: allCount = _thisMonthModel.allAmount; break; case 3: allCount = _lastMonthModel.allAmount; break; } return [ '预估收益'.text.color(Colors.black54).size(18.rsp).make(), allCount .toStringAsFixed(2) .text .color(Color(0xFF333333)) .size(28.rsp) .make(), ].column( alignment: MainAxisAlignment.center, ); } _buildCard() { return [ VxBox( child: [ SizedBox( height: 40.rw, child: TabBar( tabs: tabs.map((e) => e.text.make()).toList(), labelColor: Colors.black87, controller: _tabController, indicator: RecookIndicator( borderSide: BorderSide( width: 4.rw, color: Color(0xFFFF7473), ), ), indicatorSize: TabBarIndicatorSize.label, ), ), TabBarView( children: List.generate(tabs.length, (index) => _buildTabView(index)), controller: _tabController, ).expand(), ].column(), ) .withDecoration( BoxDecoration( image: DecorationImage( image: AssetImage(R.ASSETS_SHOP_PAGE_INCOME_CARD_PNG), fit: BoxFit.cover, ), borderRadius: BorderRadius.circular(10.rw), ), ) .height(134.rw) .margin(EdgeInsets.all(10.rw)) .make(), ].stack(); } _buildItem({ @required String path, @required String title, @required _ItemClass firstItem, @required _ItemClass secondItem, @required _ItemClass thirdItem, @required VoidCallback onTap, bool show = false, }) { if (!show) return null; Widget getColumnItem(_ItemClass item) { Widget helper = CustomImageButton( onPressed: item.onHelper, padding: EdgeInsets.all(5.rw), child: Image.asset( R.ASSETS_SHOP_HELPER_PNG, height: 9.rw, width: 9.rw, ), ); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ [ item.title.text.color(Colors.black45).size(12.rsp).make(), item.onHelper == null ? SizedBox() : helper, ].row(), 10.hb, item.value.text.black.size(16.rsp).make(), ], ).expand(); } return VxBox( child: [ CustomImageButton( onPressed: onTap, child: [ 46.hb, 16.wb, Image.asset(path, height: 20.rw, width: 20.rw), 6.wb, title.text.size(16.rsp).color(Colors.black).bold.make(), Spacer(), '查看明细'.text.color(Colors.black54).size(12).make(), Icon(Icons.arrow_forward_ios, size: 16.rw, color: Colors.black38), 16.wb, ].row(), ), Divider( height: 1.rw, thickness: 1.rw, indent: 16.rw, endIndent: 16.rw, color: Color(0xFFEEEEEE), ), Row( children: [ 16.wb, 66.hb, getColumnItem(firstItem), getColumnItem(secondItem), getColumnItem(thirdItem), 16.wb, ], ), ].column( crossAlignment: CrossAxisAlignment.start, ), ).margin(EdgeInsets.only(bottom: 10.rw)).color(Colors.white).make(); } List _buildBottomItems() { return [ _buildItem( onTap: () => CRoute.push( context, BenefitViewGen(type: UserBenefitPageType.SELF), ), path: R.ASSETS_USER_PINK_BUYER_PNG, title: '自购收益', firstItem: _ItemClass( title: '订单(笔)', value: _displayModel.purchase.count.toString(), ), secondItem: _ItemClass( title: '销售额(元)', value: _displayModel.purchase.salesVolume.toStringAsFixed(2), ), thirdItem: _ItemClass( title: '预估收益(瑞币)', value: _displayModel.purchase.amount.toStringAsFixed(2), onHelper: () {}, ), show: _purchaseShow, ), _buildItem( onTap: () => CRoute.push( context, BenefitViewGen(type: UserBenefitPageType.GUIDE), ), path: R.ASSETS_USER_PINK_SHARE_PNG, title: '导购收益', firstItem: _ItemClass( title: '订单(笔)', value: _displayModel.guide.count.toString(), ), secondItem: _ItemClass( title: '销售额(元)', value: _displayModel.guide.salesVolume.toStringAsFixed(2), ), thirdItem: _ItemClass( title: '预估收益(瑞币)', value: _displayModel.guide.amount.toStringAsFixed(2), onHelper: () {}, ), show: _guideShow, ), _buildItem( onTap: () => CRoute.push( context, BenefitViewGen(type: UserBenefitPageType.TEAM), ), path: R.ASSETS_USER_PINK_GROUP_PNG, title: '团队收益', firstItem: _ItemClass( title: '团队销售额(元)', value: _displayModel.team.salesVolume.toStringAsFixed(2), onHelper: () {}, ), secondItem: _ItemClass( title: '提成比例(%)', value: _displayModel.team.ratio.toString(), ), thirdItem: _ItemClass( title: '预估收益(瑞币)', value: _displayModel.team.amount.toStringAsFixed(2), onHelper: () {}, ), show: _teamShow, ), _buildItem( onTap: () => CRoute.push( context, BenefitViewGen(type: UserBenefitPageType.RECOMMEND), ), path: R.ASSETS_USER_PINK_GREAT_PNG, title: '推荐收益', firstItem: _ItemClass( title: '团队销售额(元)', value: _displayModel.recommend.salesVolume.toStringAsFixed(2), onHelper: () {}, ), secondItem: _ItemClass( title: '提成比例(%)', value: _displayModel.recommend.ratio.toString(), ), thirdItem: _ItemClass( title: '预估收益(瑞币)', value: _displayModel.recommend.amount.toStringAsFixed(2), onHelper: () {}, ), show: _recommendShow, ), _buildItem( onTap: () => CRoute.push( context, BenefitViewGen(type: UserBenefitPageType.PLATFORM), ), path: R.ASSETS_USER_PINK_PLATFORM_PNG, title: '平台奖励', firstItem: _ItemClass( title: '团队销售额(元)', value: _displayModel.reward.salesVolume.toStringAsFixed(2), onHelper: () {}, ), secondItem: _ItemClass( title: '提成比例(%)', value: _displayModel.reward.ratio.toString(), ), thirdItem: _ItemClass( title: '预估收益(瑞币)', value: _displayModel.reward.amount.toStringAsFixed(2), onHelper: () {}, ), show: _rewardShow, ), ]..removeWhere((element) => element == null); } @override void initState() { super.initState(); _tabController = TabController(length: 4, vsync: this) ..addListener(() { switch (_tabController.index) { case 0: _displayModel = _todayModel; break; case 1: _displayModel = _yestodayModel; break; case 2: _displayModel = _thisMonthModel; break; case 3: _displayModel = _lastMonthModel; break; } setState(() {}); }); getData(); } @override void dispose() { _tabController?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xFFF5F5F5), appBar: AppBar( leading: RecookBackButton(white: true), backgroundColor: Color(0xFF16182B), title: '我的收益'.text.make(), centerTitle: true, ), body: Stack( children: [ CustomPaint( painter: RoundBackgroundPainter(), size: Size.fromHeight(197.rw), ), ListView( children: [ _buildCard(), ..._buildBottomItems(), ], ), ], ), ); } } class _ItemClass { String title; String value; VoidCallback onHelper; _ItemClass({ @required this.title, @required this.value, this.onHelper, }); }