111
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user