Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions lib/providers/wallet_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1946,15 +1946,16 @@ class WalletProvider extends ChangeNotifier {
}

/// Restaura tokens usando otro mnemonic y los transfiere al wallet actual.
Future<BigInt> restoreWithMnemonic(
/// Retorna un mapa con la unidad como clave y el balance recuperado como valor.
Future<Map<String, BigInt>> restoreWithMnemonic(
String mnemonic,
List<String> mintUrls,
) async {
if (_db == null || _mnemonic == null) {
throw Exception('WalletProvider no inicializado');
}

BigInt totalRecovered = BigInt.zero;
final recoveredByUnit = <String, BigInt>{};

// Normalizar mnemonic
final normalizedMnemonic =
Expand Down Expand Up @@ -2001,7 +2002,7 @@ class WalletProvider extends ChangeNotifier {
// Reclamar en nuestro wallet
final ourWallet = await getWallet(mintUrl, unit);
final received = await ourWallet.receive(token: result.token);
totalRecovered += received;
recoveredByUnit[unit] = (recoveredByUnit[unit] ?? BigInt.zero) + received;
}
} catch (e) {
debugPrint('Error restaurando $mintUrl:$unit: $e');
Expand All @@ -2022,7 +2023,7 @@ class WalletProvider extends ChangeNotifier {
}

notifyListeners();
return totalRecovered;
return recoveredByUnit;
}

// ============================================================
Expand Down
18 changes: 11 additions & 7 deletions lib/screens/8_settings/recover_tokens_modal.dart
Original file line number Diff line number Diff line change
Expand Up @@ -668,20 +668,24 @@ class _RecoverTokensModalState extends State<RecoverTokensModal> {
return;
}

final recovered = await walletProvider.restoreWithMnemonic(
final recoveredMap = await walletProvider.restoreWithMnemonic(
mnemonic,
mintUrls,
);

if (!mounted) return;
setState(() {
_isSuccess = true;
if (recovered > BigInt.zero) {
// Usamos la unidad activa como aproximación para el formato
final activeUnit = walletProvider.activeUnit;
final formatted = UnitFormatter.formatBalance(recovered, activeUnit);
final label = UnitFormatter.getUnitLabel(activeUnit);
_result = l10n.recoveredAndTransferred(formatted, label);
final recoveredDetails = <String>[];
for (final entry in recoveredMap.entries) {
if (entry.value > BigInt.zero) {
final formatted = UnitFormatter.formatBalance(entry.value, entry.key);
final label = UnitFormatter.getUnitLabel(entry.key);
recoveredDetails.add('$formatted $label');
}
}
if (recoveredDetails.isNotEmpty) {
_result = l10n.recoveredTokens(recoveredDetails.join(", "), recoveredDetails.length);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
} else {
_result = l10n.noTokensForMnemonic;
}
Expand Down
2 changes: 1 addition & 1 deletion test/widget_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:elcaju/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(const MyApp());
await tester.pumpWidget(const ElCajuApp());

// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
Expand Down