diff --git a/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart b/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart index 4a65e671..a165ebf4 100644 --- a/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart +++ b/frontend/mobile-app/lib/features/profile/presentation/pages/profile_page.dart @@ -18,7 +18,8 @@ import '../../../../routes/route_paths.dart'; import '../../../../routes/app_router.dart'; import '../../../auth/presentation/providers/auth_provider.dart'; import '../widgets/team_tree_widget.dart'; -import '../widgets/stacked_cards_widget.dart'; +// TODO: 暂时禁用堆叠卡片组件,测试华为恶意软件检测问题 +// import '../widgets/stacked_cards_widget.dart'; /// 个人中心页面 - 显示用户信息、社区数据、收益和设置 /// 包含用户资料、推荐信息、社区考核、收益领取等功能 @@ -1842,147 +1843,153 @@ class _ProfilePageState extends ConsumerState { ], ), const SizedBox(height: 8), - // 堆叠卡片展示 - StackedCardsView( - items: _pendingRewards, - peekHeight: 28, - expandedCardHeight: 110, - enableSound: true, - itemBuilder: (item, isSelected, index) => _buildStackedPendingRewardCard(item, isSelected), - ), + // TODO: 暂时禁用堆叠卡片展示,测试华为恶意软件检测问题 + // StackedCardsView( + // items: _pendingRewards, + // peekHeight: 28, + // expandedCardHeight: 110, + // enableSound: true, + // itemBuilder: (item, isSelected, index) => _buildStackedPendingRewardCard(item, isSelected), + // ), + // 恢复原始列表展示 + ..._pendingRewards.map((item) => Padding( + padding: const EdgeInsets.only(bottom: 8), + child: _buildPendingRewardItem(item), + )), ], ], ); } - /// 构建堆叠卡片样式的待领取奖励项 - Widget _buildStackedPendingRewardCard(PendingRewardItem item, bool isSelected) { - // 确保剩余时间不为负数 - final remainingSeconds = item.remainingSeconds > 0 ? item.remainingSeconds : 0; - final hours = (remainingSeconds ~/ 3600).toString().padLeft(2, '0'); - final minutes = ((remainingSeconds % 3600) ~/ 60).toString().padLeft(2, '0'); - final seconds = (remainingSeconds % 60).toString().padLeft(2, '0'); - final countdown = '$hours:$minutes:$seconds'; + // TODO: 暂时禁用堆叠卡片组件,测试华为恶意软件检测问题 + // /// 构建堆叠卡片样式的待领取奖励项 + // Widget _buildStackedPendingRewardCard(PendingRewardItem item, bool isSelected) { + // // 确保剩余时间不为负数 + // final remainingSeconds = item.remainingSeconds > 0 ? item.remainingSeconds : 0; + // final hours = (remainingSeconds ~/ 3600).toString().padLeft(2, '0'); + // final minutes = ((remainingSeconds % 3600) ~/ 60).toString().padLeft(2, '0'); + // final seconds = (remainingSeconds % 60).toString().padLeft(2, '0'); + // final countdown = '$hours:$minutes:$seconds'; + // + // // 构建金额显示文本 + // final List amountParts = []; + // if (item.usdtAmount > 0) { + // amountParts.add('${_formatNumber(item.usdtAmount)} 绿积分'); + // } + // if (item.hashpowerAmount > 0) { + // amountParts.add('${_formatNumber(item.hashpowerAmount)} 算力'); + // } + // final amountText = amountParts.isNotEmpty ? amountParts.join(' ') : '0 绿积分'; + // + // return Container( + // height: isSelected ? 110 : 48, + // decoration: BoxDecoration( + // color: isSelected ? Colors.white : const Color(0xFFFFFDF8), + // borderRadius: BorderRadius.circular(8), + // border: Border.all( + // color: isSelected ? const Color(0x44D4AF37) : const Color(0x22D4AF37), + // width: isSelected ? 1.5 : 1, + // ), + // ), + // child: isSelected + // ? Padding( + // padding: const EdgeInsets.all(12), + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // // 第一行:权益类型 + 倒计时 + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // item.rightTypeName, + // style: const TextStyle( + // fontSize: 14, + // fontFamily: 'Inter', + // fontWeight: FontWeight.w600, + // color: Color(0xFF5D4037), + // ), + // ), + // Row( + // children: [ + // const Icon( + // Icons.timer_outlined, + // size: 14, + // color: Color(0xFFD4AF37), + // ), + // const SizedBox(width: 4), + // Text( + // countdown, + // style: const TextStyle( + // fontSize: 12, + // fontFamily: 'Consolas', + // fontWeight: FontWeight.w600, + // color: Color(0xFFD4AF37), + // ), + // ), + // ], + // ), + // ], + // ), + // const SizedBox(height: 8), + // // 第二行:金额信息 + // Text( + // amountText, + // style: const TextStyle( + // fontSize: 16, + // fontFamily: 'Inter', + // fontWeight: FontWeight.w700, + // color: Color(0xFF5D4037), + // ), + // ), + // // 第三行:备注信息 + // if (item.memo.isNotEmpty) ...[ + // const SizedBox(height: 4), + // Text( + // item.memo, + // style: const TextStyle( + // fontSize: 11, + // fontFamily: 'Inter', + // color: Color(0x995D4037), + // ), + // maxLines: 2, + // overflow: TextOverflow.ellipsis, + // ), + // ], + // ], + // ), + // ) + // : Padding( + // // 未选中状态:只显示卡片头部预览 + // padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // item.rightTypeName, + // style: const TextStyle( + // fontSize: 13, + // fontFamily: 'Inter', + // fontWeight: FontWeight.w500, + // color: Color(0xFF5D4037), + // ), + // ), + // Text( + // amountText, + // style: const TextStyle( + // fontSize: 13, + // fontFamily: 'Inter', + // fontWeight: FontWeight.w600, + // color: Color(0xFFD4AF37), + // ), + // ), + // ], + // ), + // ), + // ); + // } - // 构建金额显示文本 - final List amountParts = []; - if (item.usdtAmount > 0) { - amountParts.add('${_formatNumber(item.usdtAmount)} 绿积分'); - } - if (item.hashpowerAmount > 0) { - amountParts.add('${_formatNumber(item.hashpowerAmount)} 算力'); - } - final amountText = amountParts.isNotEmpty ? amountParts.join(' ') : '0 绿积分'; - - return Container( - height: isSelected ? 110 : 48, - decoration: BoxDecoration( - color: isSelected ? Colors.white : const Color(0xFFFFFDF8), - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: isSelected ? const Color(0x44D4AF37) : const Color(0x22D4AF37), - width: isSelected ? 1.5 : 1, - ), - ), - child: isSelected - ? Padding( - padding: const EdgeInsets.all(12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // 第一行:权益类型 + 倒计时 - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - item.rightTypeName, - style: const TextStyle( - fontSize: 14, - fontFamily: 'Inter', - fontWeight: FontWeight.w600, - color: Color(0xFF5D4037), - ), - ), - Row( - children: [ - const Icon( - Icons.timer_outlined, - size: 14, - color: Color(0xFFD4AF37), - ), - const SizedBox(width: 4), - Text( - countdown, - style: const TextStyle( - fontSize: 12, - fontFamily: 'Consolas', - fontWeight: FontWeight.w600, - color: Color(0xFFD4AF37), - ), - ), - ], - ), - ], - ), - const SizedBox(height: 8), - // 第二行:金额信息 - Text( - amountText, - style: const TextStyle( - fontSize: 16, - fontFamily: 'Inter', - fontWeight: FontWeight.w700, - color: Color(0xFF5D4037), - ), - ), - // 第三行:备注信息 - if (item.memo.isNotEmpty) ...[ - const SizedBox(height: 4), - Text( - item.memo, - style: const TextStyle( - fontSize: 11, - fontFamily: 'Inter', - color: Color(0x995D4037), - ), - maxLines: 2, - overflow: TextOverflow.ellipsis, - ), - ], - ], - ), - ) - : Padding( - // 未选中状态:只显示卡片头部预览 - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - item.rightTypeName, - style: const TextStyle( - fontSize: 13, - fontFamily: 'Inter', - fontWeight: FontWeight.w500, - color: Color(0xFF5D4037), - ), - ), - Text( - amountText, - style: const TextStyle( - fontSize: 13, - fontFamily: 'Inter', - fontWeight: FontWeight.w600, - color: Color(0xFFD4AF37), - ), - ), - ], - ), - ), - ); - } - - /// 构建单条待领取奖励项(保留用于其他可能用途) + /// 构建单条待领取奖励项 Widget _buildPendingRewardItem(PendingRewardItem item) { // 确保剩余时间不为负数 final remainingSeconds = item.remainingSeconds > 0 ? item.remainingSeconds : 0;