diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index dc47e33..2a1c870 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "Angebot abgelaufen", "swapErrorGeneric": "Swap-Fehler: {error}", "swapChartUnavailable": "Preis nicht verfügbar · Tippen zum Wiederholen", - "swapChartMin": "Min", - "swapChartMax": "Max" + "swapChartMinMax": "24h Min: {minPrice} — Max: {maxPrice}" } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 2637fe6..e0cc0b5 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -468,6 +468,5 @@ "swapErrorExpired": "Quote has expired", "swapErrorGeneric": "Swap error: {error}", "swapChartUnavailable": "Price unavailable · Tap to retry", - "swapChartMin": "Min", - "swapChartMax": "Max" + "swapChartMinMax": "24h Min: {minPrice} — Max: {maxPrice}" } diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 36d25ce..3e63292 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -598,6 +598,11 @@ } }, "swapChartUnavailable": "Precio no disponible · Toca para reintentar", - "swapChartMin": "Mín", - "swapChartMax": "Máx" + "swapChartMinMax": "24h Mín: {minPrice} — Máx: {maxPrice}", + "@swapChartMinMax": { + "placeholders": { + "minPrice": { "type": "String" }, + "maxPrice": { "type": "String" } + } + } } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 1da0f79..5fbd932 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "Le devis a expiré", "swapErrorGeneric": "Erreur de swap : {error}", "swapChartUnavailable": "Prix indisponible · Appuyez pour réessayer", - "swapChartMin": "Min", - "swapChartMax": "Max" + "swapChartMinMax": "24h Min : {minPrice} — Max : {maxPrice}" } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index 55d956c..05b05a2 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "Il preventivo è scaduto", "swapErrorGeneric": "Errore swap: {error}", "swapChartUnavailable": "Prezzo non disponibile · Tocca per riprovare", - "swapChartMin": "Min", - "swapChartMax": "Max" + "swapChartMinMax": "24h Min: {minPrice} — Max: {maxPrice}" } diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 9d5ec81..32b7b2c 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "見積もりの有効期限切れ", "swapErrorGeneric": "スワップエラー: {error}", "swapChartUnavailable": "価格を取得できません・タップで再試行", - "swapChartMin": "安値", - "swapChartMax": "高値" + "swapChartMinMax": "24h 安値: {minPrice} — 高値: {maxPrice}" } diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index 107fd7e..b3844de 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "견적이 만료되었습니다", "swapErrorGeneric": "교환 오류: {error}", "swapChartUnavailable": "가격 불러오기 실패 · 탭하여 재시도", - "swapChartMin": "최저", - "swapChartMax": "최고" + "swapChartMinMax": "24h 최저: {minPrice} — 최고: {maxPrice}" } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 828f538..bd1b87f 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -2437,17 +2437,11 @@ abstract class L10n { /// **'Precio no disponible · Toca para reintentar'** String get swapChartUnavailable; - /// No description provided for @swapChartMin. + /// No description provided for @swapChartMinMax. /// /// In es, this message translates to: - /// **'Mín'** - String get swapChartMin; - - /// No description provided for @swapChartMax. - /// - /// In es, this message translates to: - /// **'Máx'** - String get swapChartMax; + /// **'24h Mín: {minPrice} — Máx: {maxPrice}'** + String swapChartMinMax(String minPrice, String maxPrice); } class _L10nDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 9872030..a6cdafc 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -1290,8 +1290,7 @@ class L10nDe extends L10n { 'Preis nicht verfügbar · Tippen zum Wiederholen'; @override - String get swapChartMin => 'Min'; - - @override - String get swapChartMax => 'Max'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Min: $minPrice — Max: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 9acaa0a..fc9ba52 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -1270,8 +1270,7 @@ class L10nEn extends L10n { String get swapChartUnavailable => 'Price unavailable · Tap to retry'; @override - String get swapChartMin => 'Min'; - - @override - String get swapChartMax => 'Max'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Min: $minPrice — Max: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index ad77c70..b9b7835 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -1279,8 +1279,7 @@ class L10nEs extends L10n { 'Precio no disponible · Toca para reintentar'; @override - String get swapChartMin => 'Mín'; - - @override - String get swapChartMax => 'Máx'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Mín: $minPrice — Máx: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index e9b1d7c..1ce6eae 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -1295,8 +1295,7 @@ class L10nFr extends L10n { 'Prix indisponible · Appuyez pour réessayer'; @override - String get swapChartMin => 'Min'; - - @override - String get swapChartMax => 'Max'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Min : $minPrice — Max : $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index bbe2c52..807217b 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -1283,8 +1283,7 @@ class L10nIt extends L10n { 'Prezzo non disponibile · Tocca per riprovare'; @override - String get swapChartMin => 'Min'; - - @override - String get swapChartMax => 'Max'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Min: $minPrice — Max: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index 8b9c3d9..a1e52d6 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -1255,8 +1255,7 @@ class L10nJa extends L10n { String get swapChartUnavailable => '価格を取得できません・タップで再試行'; @override - String get swapChartMin => '安値'; - - @override - String get swapChartMax => '高値'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h 安値: $minPrice — 高値: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index 3601bd8..5af1ebc 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -1257,8 +1257,7 @@ class L10nKo extends L10n { String get swapChartUnavailable => '가격 불러오기 실패 · 탭하여 재시도'; @override - String get swapChartMin => '최저'; - - @override - String get swapChartMax => '최고'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h 최저: $minPrice — 최고: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index 6be9dcc..0ac15ad 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -1283,8 +1283,7 @@ class L10nPt extends L10n { 'Preço indisponível · Toque para tentar novamente'; @override - String get swapChartMin => 'Mín'; - - @override - String get swapChartMax => 'Máx'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Mín: $minPrice — Máx: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index c977adf..a441915 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -1278,8 +1278,7 @@ class L10nRu extends L10n { String get swapChartUnavailable => 'Цена недоступна · Нажмите для повтора'; @override - String get swapChartMin => 'Мин'; - - @override - String get swapChartMax => 'Макс'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Мин: $minPrice — Макс: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_sw.dart b/lib/l10n/app_localizations_sw.dart index ab2f616..8fe4b0e 100644 --- a/lib/l10n/app_localizations_sw.dart +++ b/lib/l10n/app_localizations_sw.dart @@ -1279,8 +1279,7 @@ class L10nSw extends L10n { String get swapChartUnavailable => 'Bei haipatikani · Gusa kurudia'; @override - String get swapChartMin => 'Chini'; - - @override - String get swapChartMax => 'Juu'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h Chini: $minPrice — Juu: $maxPrice'; + } } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index e4b2b11..3bf625b 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -1250,8 +1250,7 @@ class L10nZh extends L10n { String get swapChartUnavailable => '价格不可用 · 点击重试'; @override - String get swapChartMin => '最低'; - - @override - String get swapChartMax => '最高'; + String swapChartMinMax(String minPrice, String maxPrice) { + return '24h 最低: $minPrice — 最高: $maxPrice'; + } } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index aa17160..bc5bc1b 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "A cotação expirou", "swapErrorGeneric": "Erro no swap: {error}", "swapChartUnavailable": "Preço indisponível · Toque para tentar novamente", - "swapChartMin": "Mín", - "swapChartMax": "Máx" + "swapChartMinMax": "24h Mín: {minPrice} — Máx: {maxPrice}" } diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index ff88318..014e45d 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "Котировка истекла", "swapErrorGeneric": "Ошибка обмена: {error}", "swapChartUnavailable": "Цена недоступна · Нажмите для повтора", - "swapChartMin": "Мин", - "swapChartMax": "Макс" + "swapChartMinMax": "24h Мин: {minPrice} — Макс: {maxPrice}" } diff --git a/lib/l10n/app_sw.arb b/lib/l10n/app_sw.arb index a516ffd..2d057e5 100644 --- a/lib/l10n/app_sw.arb +++ b/lib/l10n/app_sw.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "Bei imeisha muda", "swapErrorGeneric": "Kosa la ubadilishaji: {error}", "swapChartUnavailable": "Bei haipatikani · Gusa kurudia", - "swapChartMin": "Chini", - "swapChartMax": "Juu" + "swapChartMinMax": "24h Chini: {minPrice} — Juu: {maxPrice}" } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 4b8647b..079d40b 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -575,6 +575,5 @@ "swapErrorExpired": "报价已过期", "swapErrorGeneric": "兑换错误: {error}", "swapChartUnavailable": "价格不可用 · 点击重试", - "swapChartMin": "最低", - "swapChartMax": "最高" + "swapChartMinMax": "24h 最低: {minPrice} — 最高: {maxPrice}" } diff --git a/lib/screens/13_swap/swap_screen.dart b/lib/screens/13_swap/swap_screen.dart index c5aa9d7..341747c 100644 --- a/lib/screens/13_swap/swap_screen.dart +++ b/lib/screens/13_swap/swap_screen.dart @@ -102,11 +102,18 @@ class _SwapScreenState extends State }); try { final prices = await PriceService.getHistoricalPrices(range: 'ONE_DAY'); - if (mounted && prices.isNotEmpty) { + if (!mounted) return; + if (prices.length >= 2) { setState(() { _chartData = prices.map((p) => p.priceUsd).toList(); _isLoadingChart = false; }); + } else { + setState(() { + _chartData = []; + _isLoadingChart = false; + _chartError = true; + }); } } catch (_) { if (mounted) { @@ -731,9 +738,10 @@ class _SwapScreenState extends State if (hasData) { final minVal = _chartData.reduce(min); final maxVal = _chartData.reduce(max); - final minLabel = l10n.swapChartMin; - final maxLabel = l10n.swapChartMax; - minMaxStr = '24h $minLabel: \$${fmt.format(minVal.round())} — $maxLabel: \$${fmt.format(maxVal.round())}'; + minMaxStr = l10n.swapChartMinMax( + '\$${fmt.format(minVal.round())}', + '\$${fmt.format(maxVal.round())}', + ); } return Column(