1269 lines
36 KiB
Dart
1269 lines
36 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import '../../../../routes/route_paths.dart';
|
|
import 'dart:async';
|
|
|
|
/// 个人中心页面 - 显示用户信息、社区数据、收益和设置
|
|
/// 包含用户资料、推荐信息、社区考核、收益领取等功能
|
|
class ProfilePage extends ConsumerStatefulWidget {
|
|
const ProfilePage({super.key});
|
|
|
|
@override
|
|
ConsumerState<ProfilePage> createState() => _ProfilePageState();
|
|
}
|
|
|
|
class _ProfilePageState extends ConsumerState<ProfilePage> {
|
|
// 模拟用户数据
|
|
final String _nickname = '用户昵称';
|
|
final String _serialNumber = '12345678';
|
|
final String _referrerSerial = '87654321';
|
|
final String _community = '星空社区';
|
|
final String _parentCommunity = '银河社区';
|
|
final String _childCommunity = '星辰社区';
|
|
final String _cityCompany = '深圳公司';
|
|
final String _provinceCompany = '广东公司';
|
|
final String _province = '广东';
|
|
|
|
// 团队数据
|
|
final int _teamUsers = 1204;
|
|
final int _teamPlanting = 8930;
|
|
|
|
// 直推数据
|
|
final List<Map<String, dynamic>> _referrals = [
|
|
{'serial': '87654321', 'personal': 15, 'team': 120},
|
|
{'serial': '87654322', 'personal': 10, 'team': 85},
|
|
{'serial': '87654323', 'personal': 25, 'team': 250},
|
|
];
|
|
|
|
// 社区考核数据
|
|
final int _communityLevel = 3;
|
|
final int _currentPlanting = 12;
|
|
final int _requiredPlanting = 50;
|
|
|
|
// 收益数据
|
|
final double _pendingUsdt = 320.75;
|
|
final double _pendingPower = 50.00;
|
|
final double _settleableUsdt = 1500.00;
|
|
final double _settledUsdt = 8500.50;
|
|
final double _expiredUsdt = 250.00;
|
|
final double _expiredPower = 15.00;
|
|
|
|
// 倒计时
|
|
Timer? _timer;
|
|
int _remainingSeconds = 66942; // 18:35:42
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_startCountdown();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_timer?.cancel();
|
|
super.dispose();
|
|
}
|
|
|
|
/// 开始倒计时
|
|
void _startCountdown() {
|
|
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
|
if (_remainingSeconds > 0) {
|
|
setState(() {
|
|
_remainingSeconds--;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/// 格式化倒计时
|
|
String _formatCountdown() {
|
|
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');
|
|
return '$hours : $minutes : $seconds';
|
|
}
|
|
|
|
/// 复制序列号
|
|
void _copySerialNumber() {
|
|
Clipboard.setData(ClipboardData(text: _serialNumber));
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
const SnackBar(
|
|
content: Text('序列号已复制'),
|
|
backgroundColor: Color(0xFFD4AF37),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 复制分享链接
|
|
void _copyShareLink() {
|
|
Clipboard.setData(ClipboardData(text: 'https://rwa.app/invite/$_serialNumber'));
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
const SnackBar(
|
|
content: Text('分享链接已复制'),
|
|
backgroundColor: Color(0xFFD4AF37),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 领取全部收益
|
|
void _claimAllEarnings() {
|
|
showDialog(
|
|
context: context,
|
|
builder: (context) => AlertDialog(
|
|
title: const Text('确认领取'),
|
|
content: Text(
|
|
'确定领取全部收益吗?\nUSDT: ${_formatNumber(_pendingUsdt)}\n算力: ${_formatNumber(_pendingPower)}',
|
|
),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () => Navigator.pop(context),
|
|
child: const Text('取消'),
|
|
),
|
|
TextButton(
|
|
onPressed: () {
|
|
Navigator.pop(context);
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
const SnackBar(
|
|
content: Text('领取成功'),
|
|
backgroundColor: Color(0xFFD4AF37),
|
|
),
|
|
);
|
|
},
|
|
child: const Text('确认'),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 结算
|
|
void _onSettlement() {
|
|
context.go(RoutePaths.trading);
|
|
}
|
|
|
|
/// 充值USDT
|
|
void _onDeposit() {
|
|
context.push(RoutePaths.depositUsdt);
|
|
}
|
|
|
|
/// 进入交易
|
|
void _goToTrading() {
|
|
context.go(RoutePaths.trading);
|
|
}
|
|
|
|
/// 进入认种
|
|
void _goToPlanting() {
|
|
context.push(RoutePaths.plantingQuantity);
|
|
}
|
|
|
|
/// 谷歌验证器
|
|
void _goToGoogleAuth() {
|
|
context.push(RoutePaths.googleAuth);
|
|
}
|
|
|
|
/// 修改密码
|
|
void _goToChangePassword() {
|
|
context.push(RoutePaths.changePassword);
|
|
}
|
|
|
|
/// 绑定邮箱
|
|
void _goToBindEmail() {
|
|
context.push(RoutePaths.bindEmail);
|
|
}
|
|
|
|
/// 编辑资料
|
|
void _goToEditProfile() {
|
|
context.push(RoutePaths.editProfile);
|
|
}
|
|
|
|
/// 格式化数字
|
|
String _formatNumber(double number) {
|
|
final parts = number.toStringAsFixed(2).split('.');
|
|
final intPart = parts[0].replaceAllMapped(
|
|
RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'),
|
|
(Match m) => '${m[1]},',
|
|
);
|
|
return '$intPart.${parts[1]}';
|
|
}
|
|
|
|
/// 格式化整数
|
|
String _formatInt(int number) {
|
|
return number.toString().replaceAllMapped(
|
|
RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'),
|
|
(Match m) => '${m[1]},',
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
backgroundColor: Colors.white,
|
|
body: Container(
|
|
width: double.infinity,
|
|
height: double.infinity,
|
|
decoration: const BoxDecoration(
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [
|
|
Color(0xFFFFF5E6),
|
|
Color(0xFFFFE4B5),
|
|
],
|
|
),
|
|
),
|
|
child: SafeArea(
|
|
child: SingleChildScrollView(
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const SizedBox(height: 16),
|
|
// 用户头像和基本信息
|
|
_buildUserHeader(),
|
|
const SizedBox(height: 16),
|
|
// 推荐人信息卡片
|
|
_buildReferralInfoCard(),
|
|
const SizedBox(height: 16),
|
|
// 社区/省份标签
|
|
_buildCommunityLabel(),
|
|
const SizedBox(height: 8),
|
|
// 认种按钮
|
|
_buildPlantingButton(),
|
|
const SizedBox(height: 16),
|
|
// 主要内容卡片
|
|
_buildMainContentCard(),
|
|
const SizedBox(height: 24),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建用户头像和基本信息
|
|
Widget _buildUserHeader() {
|
|
return Row(
|
|
children: [
|
|
// 头像(点击跳转到编辑资料页面)
|
|
GestureDetector(
|
|
onTap: _goToEditProfile,
|
|
child: Container(
|
|
width: 80,
|
|
height: 80,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(40),
|
|
color: const Color(0xFFFFF5E6),
|
|
),
|
|
child: ClipRRect(
|
|
borderRadius: BorderRadius.circular(40),
|
|
child: Image.asset(
|
|
'assets/images/Button@2x.png',
|
|
fit: BoxFit.cover,
|
|
errorBuilder: (context, error, stackTrace) {
|
|
return const Icon(
|
|
Icons.person,
|
|
size: 40,
|
|
color: Color(0xFF8B5A2B),
|
|
);
|
|
},
|
|
),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(width: 16),
|
|
// 用户信息
|
|
Expanded(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
_nickname,
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
letterSpacing: -0.3,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
const SizedBox(height: 3),
|
|
Row(
|
|
children: [
|
|
Text(
|
|
'序列号: $_serialNumber',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
const SizedBox(width: 8),
|
|
GestureDetector(
|
|
onTap: _copySerialNumber,
|
|
child: const Icon(
|
|
Icons.copy,
|
|
size: 16,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// 构建推荐人信息卡片
|
|
Widget _buildReferralInfoCard() {
|
|
return Container(
|
|
width: double.infinity,
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0x80FFFFFF),
|
|
borderRadius: BorderRadius.circular(12),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: Text(
|
|
'推荐人的序列号:',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
),
|
|
Expanded(
|
|
child: Text(
|
|
'下级社区:',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 4),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: Text(
|
|
'所属社区:',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
),
|
|
Expanded(
|
|
child: Text(
|
|
'授权市公司:',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 4),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
child: Text(
|
|
'上级社区:',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
),
|
|
Expanded(
|
|
child: Text(
|
|
'授权省公司:',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建社区/省份标签
|
|
Widget _buildCommunityLabel() {
|
|
return const Text(
|
|
'社区 / 省份',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
height: 1.5,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建认种按钮
|
|
Widget _buildPlantingButton() {
|
|
return GestureDetector(
|
|
onTap: _goToPlanting,
|
|
child: Container(
|
|
width: double.infinity,
|
|
height: 48,
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFD4AF37),
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
child: const Center(
|
|
child: Text(
|
|
'认种 / Planting',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
letterSpacing: 0.24,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建主要内容卡片
|
|
Widget _buildMainContentCard() {
|
|
return Container(
|
|
width: double.infinity,
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0x80FFFFFF),
|
|
borderRadius: BorderRadius.circular(12),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
children: [
|
|
// 收益区域
|
|
_buildEarningsSection(),
|
|
const SizedBox(height: 16),
|
|
// 结算区域
|
|
_buildSettlementSection(),
|
|
const SizedBox(height: 16),
|
|
// 已过期区域
|
|
_buildExpiredSection(),
|
|
const SizedBox(height: 16),
|
|
// 操作按钮
|
|
_buildActionButtons(),
|
|
const SizedBox(height: 16),
|
|
// 团队统计
|
|
_buildTeamStats(),
|
|
const SizedBox(height: 16),
|
|
// 直推列表
|
|
_buildReferralList(),
|
|
const SizedBox(height: 16),
|
|
// 复制分享链接
|
|
_buildCopyShareButton(),
|
|
const SizedBox(height: 16),
|
|
// 社区权益考核
|
|
_buildCommunityAssessment(),
|
|
const SizedBox(height: 16),
|
|
// 设置菜单
|
|
_buildSettingsMenu(),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建收益区域
|
|
Widget _buildEarningsSection() {
|
|
return Container(
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFFFF5E6),
|
|
borderRadius: BorderRadius.circular(8),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
// 倒计时
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'24 小时倒计时',
|
|
style: TextStyle(
|
|
fontSize: 12,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
_formatCountdown(),
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Consolas',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
letterSpacing: 0.7,
|
|
color: Color(0xFFD4AF37),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 15),
|
|
// 待领取 USDT
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'待领取 (USDT)',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
_formatNumber(_pendingUsdt),
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 11),
|
|
// 待领取 算力
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'待领取 (算力)',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
_formatNumber(_pendingPower),
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 15),
|
|
// 领取全部按钮
|
|
GestureDetector(
|
|
onTap: _claimAllEarnings,
|
|
child: Container(
|
|
width: double.infinity,
|
|
height: 40,
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFD4AF37),
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
child: const Center(
|
|
child: Text(
|
|
'领取全部',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
letterSpacing: 0.21,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建结算区域
|
|
Widget _buildSettlementSection() {
|
|
return Container(
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFFFF5E6),
|
|
borderRadius: BorderRadius.circular(8),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
// 可结算 USDT
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'可结算 (USDT)',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
_formatNumber(_settleableUsdt),
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 11),
|
|
// 已结算 USDT
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
const Text(
|
|
'已结算 (USDT)',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
GestureDetector(
|
|
onTap: _onSettlement,
|
|
child: Container(
|
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 7),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFD4AF37),
|
|
borderRadius: BorderRadius.circular(4),
|
|
),
|
|
child: const Text(
|
|
'结算',
|
|
style: TextStyle(
|
|
fontSize: 12,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
letterSpacing: 0.18,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 4),
|
|
Text(
|
|
_formatNumber(_settledUsdt),
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建已过期区域
|
|
Widget _buildExpiredSection() {
|
|
return Container(
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFFFF5E6),
|
|
borderRadius: BorderRadius.circular(8),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'已过期',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
const SizedBox(height: 7),
|
|
// 已过期 USDT
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'已过期 (USDT)',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
_formatNumber(_expiredUsdt),
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 11),
|
|
// 已过期 算力
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'已过期 (算力)',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
_formatNumber(_expiredPower),
|
|
style: const TextStyle(
|
|
fontSize: 20,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建操作按钮
|
|
Widget _buildActionButtons() {
|
|
return Column(
|
|
children: [
|
|
// 充值 USDT 按钮
|
|
GestureDetector(
|
|
onTap: _onDeposit,
|
|
child: Container(
|
|
width: double.infinity,
|
|
height: 48,
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFD4AF37),
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
child: const Center(
|
|
child: Text(
|
|
'充值 USDT (KAVA / BSC)',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
letterSpacing: 0.24,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(height: 12),
|
|
// 进入交易按钮
|
|
GestureDetector(
|
|
onTap: _goToTrading,
|
|
child: Container(
|
|
width: double.infinity,
|
|
height: 48,
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFF8B5A2B),
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
child: const Center(
|
|
child: Text(
|
|
'进入交易 (卖出 DST → USDT)',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
letterSpacing: 0.24,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// 构建团队统计
|
|
Widget _buildTeamStats() {
|
|
return Row(
|
|
children: [
|
|
Expanded(
|
|
child: Container(
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFFFF5E6),
|
|
borderRadius: BorderRadius.circular(8),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
children: [
|
|
const Text(
|
|
'团队注册用户',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
const SizedBox(height: 8),
|
|
Text(
|
|
_formatInt(_teamUsers),
|
|
style: const TextStyle(
|
|
fontSize: 24,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(width: 16),
|
|
Expanded(
|
|
child: Container(
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFFFF5E6),
|
|
borderRadius: BorderRadius.circular(8),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
children: [
|
|
const Text(
|
|
'团队种植数量',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
const SizedBox(height: 8),
|
|
Text(
|
|
_formatInt(_teamPlanting),
|
|
style: const TextStyle(
|
|
fontSize: 24,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.25,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// 构建直推列表
|
|
Widget _buildReferralList() {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Padding(
|
|
padding: EdgeInsets.only(top: 8),
|
|
child: Text(
|
|
'直推列表',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(height: 8),
|
|
..._referrals.map((referral) => Padding(
|
|
padding: const EdgeInsets.only(bottom: 8),
|
|
child: Container(
|
|
padding: const EdgeInsets.all(12),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xCCFFF5E6),
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'序列号: ${referral['serial']}',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.43,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
'个人/团队: ${referral['personal']} / ${referral['team']}',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
height: 1.43,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
)),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// 构建复制分享按钮
|
|
Widget _buildCopyShareButton() {
|
|
return GestureDetector(
|
|
onTap: _copyShareLink,
|
|
child: Container(
|
|
width: double.infinity,
|
|
height: 48,
|
|
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0x33D4AF37),
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: const [
|
|
Icon(
|
|
Icons.share,
|
|
size: 24,
|
|
color: Color(0xFFD4AF37),
|
|
),
|
|
SizedBox(width: 8),
|
|
Text(
|
|
'复制分享链接',
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.5,
|
|
letterSpacing: 0.24,
|
|
color: Color(0xFFD4AF37),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建社区权益考核
|
|
Widget _buildCommunityAssessment() {
|
|
return Container(
|
|
padding: const EdgeInsets.all(16),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0x80FFFFFF),
|
|
borderRadius: BorderRadius.circular(12),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const Text(
|
|
'社区权益考核',
|
|
style: TextStyle(
|
|
fontSize: 18,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.56,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
const SizedBox(height: 15),
|
|
// 社区等级
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
const Text(
|
|
'社区等级',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.43,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
'Level $_communityLevel',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w700,
|
|
height: 1.43,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 16),
|
|
// 种植数量
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
const Text(
|
|
'种植数量 / 等级要求',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.43,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
Text(
|
|
'$_currentPlanting / $_requiredPlanting',
|
|
style: const TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.43,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
const SizedBox(height: 4),
|
|
// 进度条
|
|
Container(
|
|
height: 6,
|
|
decoration: BoxDecoration(
|
|
color: const Color(0x33D4AF37),
|
|
borderRadius: BorderRadius.circular(3),
|
|
),
|
|
child: FractionallySizedBox(
|
|
alignment: Alignment.centerLeft,
|
|
widthFactor: _currentPlanting / _requiredPlanting,
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
color: const Color(0xFFD4AF37),
|
|
borderRadius: BorderRadius.circular(3),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(height: 16),
|
|
// 社区贡献奖励
|
|
Row(
|
|
children: const [
|
|
Text(
|
|
'社区贡献奖励',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.43,
|
|
color: Color(0xCC5D4037),
|
|
),
|
|
),
|
|
SizedBox(width: 39),
|
|
Expanded(
|
|
child: Text(
|
|
'有资格获得 3% 的社区福利',
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.43,
|
|
color: Color(0xFFD4AF37),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建设置菜单
|
|
Widget _buildSettingsMenu() {
|
|
return Container(
|
|
padding: const EdgeInsets.all(8),
|
|
decoration: BoxDecoration(
|
|
color: const Color(0x80FFFFFF),
|
|
borderRadius: BorderRadius.circular(12),
|
|
border: Border.all(
|
|
color: const Color(0x33D4AF37),
|
|
width: 1,
|
|
),
|
|
),
|
|
child: Column(
|
|
children: [
|
|
_buildSettingItem(
|
|
icon: Icons.verified_user,
|
|
title: '谷歌验证器',
|
|
onTap: _goToGoogleAuth,
|
|
),
|
|
_buildSettingItem(
|
|
icon: Icons.lock,
|
|
title: '修改登录密码',
|
|
onTap: _goToChangePassword,
|
|
),
|
|
_buildSettingItem(
|
|
icon: Icons.email,
|
|
title: '绑定邮箱',
|
|
onTap: _goToBindEmail,
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 构建设置项
|
|
Widget _buildSettingItem({
|
|
required IconData icon,
|
|
required String title,
|
|
required VoidCallback onTap,
|
|
}) {
|
|
return GestureDetector(
|
|
onTap: onTap,
|
|
child: Container(
|
|
height: 48,
|
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10),
|
|
child: Row(
|
|
children: [
|
|
Icon(
|
|
icon,
|
|
size: 24,
|
|
color: const Color(0xFF8B5A2B),
|
|
),
|
|
const SizedBox(width: 16),
|
|
Expanded(
|
|
child: Text(
|
|
title,
|
|
style: const TextStyle(
|
|
fontSize: 16,
|
|
fontFamily: 'Inter',
|
|
fontWeight: FontWeight.w500,
|
|
height: 1.5,
|
|
color: Color(0xFF5D4037),
|
|
),
|
|
),
|
|
),
|
|
const Icon(
|
|
Icons.chevron_right,
|
|
size: 24,
|
|
color: Color(0xFF8B5A2B),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|