This commit is contained in:
sion
2026-04-21 08:09:45 +08:00
parent 0066615054
commit 5264043c21
1831 changed files with 15376 additions and 39973 deletions

View File

@@ -5,15 +5,14 @@ import '../../../../core/theme/app_spacing.dart';
import '../../../../data/models/account_models.dart';
import '../../../components/glass_panel.dart';
import '../../../components/coin_icon.dart';
import '../../chart/chart_page.dart';
/// 持倉區域
/// Header: "我的資產" + "查看全部 >"
/// Holdings Card: cornerRadius lg, fill $surface-card, stroke $border-default 1px
class HoldingsSection extends StatelessWidget {
final List holdings;
final Set<String> platformCoinCodes;
final void Function(String coinCode)? onTapTrade;
const HoldingsSection({super.key, required this.holdings});
const HoldingsSection({super.key, required this.holdings, this.platformCoinCodes = const {}, this.onTapTrade});
@override
Widget build(BuildContext context) {
@@ -60,6 +59,7 @@ class HoldingsSection extends StatelessWidget {
children: List.generate(holdings.length, (index) {
final h = holdings[index] as AccountTrade;
final isProfit = h.profitRate >= 0;
final isPlatform = platformCoinCodes.contains(h.coinCode);
return Column(
children: [
HoldingRow(
@@ -68,6 +68,8 @@ class HoldingsSection extends StatelessWidget {
value: '${double.tryParse(h.currentValue)?.toStringAsFixed(2) ?? h.currentValue} USDT',
profitRate: '${isProfit ? '+' : ''}${h.profitRate.toStringAsFixed(2)}%',
isProfit: isProfit,
isTradable: isPlatform,
onTap: isPlatform ? () => onTapTrade?.call(h.coinCode) : null,
),
if (index < holdings.length - 1) const HoldingDivider(),
],
@@ -106,6 +108,8 @@ class HoldingRow extends StatelessWidget {
final String value;
final String profitRate;
final bool isProfit;
final bool isTradable;
final VoidCallback? onTap;
const HoldingRow({
super.key,
@@ -114,6 +118,8 @@ class HoldingRow extends StatelessWidget {
required this.value,
required this.profitRate,
required this.isProfit,
this.isTradable = false,
this.onTap,
});
@override
@@ -123,12 +129,7 @@ class HoldingRow extends StatelessWidget {
final profitColor = isProfit ? context.appColors.up : context.appColors.down;
return InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => ChartPage(symbol: coinCode)),
);
},
onTap: onTap,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: 14),
child: Row(