diff --git a/assets/translations/en.json b/assets/translations/en.json index d32c412c6f4810273b83c0342936591fac9f614c..4eeb925c12820054fe9b7341ef512855f348e156 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -223,5 +223,6 @@ "qr_scanner_flash_on": "FLASH ON", "qr_scanner_flash_off": "FLASH OFF", "qr_scanner_title": "Scan QR Code", - "display_amounts_du": "Display amounts in DU" + "display_amounts_du": "Display amounts in DU", + "wallet_already_imported": "Wallet already imported" } diff --git a/assets/translations/es.json b/assets/translations/es.json index aae8d347349c847299da9ac23c842984260353cb..8b6382ab9979e405a436b93a8c9bfca5c3b1bbd2 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -226,5 +226,6 @@ "qr_scanner_flash_on": "FLASH ON", "qr_scanner_flash_off": "FLASH OFF", "qr_scanner_title": "Escanea un QR Code", - "display_amounts_du": "Mostrar importes en DU" + "display_amounts_du": "Mostrar importes en DU", + "wallet_already_imported": "Monedero ya importado" } diff --git a/lib/data/models/cesium_card.dart b/lib/data/models/cesium_card.dart index 5702960c917326b5d6d767d9357f6101fcd250b8..912e771ec71cf3eb64bcb2f253fe73c43b277055 100644 --- a/lib/data/models/cesium_card.dart +++ b/lib/data/models/cesium_card.dart @@ -8,16 +8,18 @@ part 'cesium_card.g.dart'; @JsonSerializable() @CopyWith() -class CesiumCard implements IsJsonSerializable<CesiumCard> { - CesiumCard( - {required this.seed, - required this.pubKey, - required this.name, - required this.theme}); +class CesiumCard + implements IsJsonSerializable<CesiumCard> { + CesiumCard({required this.seed, + required this.pubKey, + required this.name, + required this.theme}); factory CesiumCard.fromJson(Map<String, dynamic> json) => _$CesiumCardFromJson(json); + static const String unknown = 'unknown'; + final String pubKey; final String seed; final CreditCardTheme theme; diff --git a/lib/shared_prefs.dart b/lib/shared_prefs.dart index 56ae06597ced4e9ef662f3bd87f70787f1ae10b8..4f999f676d7f09b1b9ea1c831adf1020596c6230 100644 --- a/lib/shared_prefs.dart +++ b/lib/shared_prefs.dart @@ -155,4 +155,13 @@ class SharedPreferencesHelper { cesiumCards[0] = defCesiumCard; saveCesiumCards(); } + + bool has(String wallet) { + for (final CesiumCard card in cesiumCards) { + if (card.pubKey == wallet) { + return true; + } + } + return false; + } } diff --git a/lib/ui/screens/fifth_screen.dart b/lib/ui/screens/fifth_screen.dart index b86fb47ef836fe350e5e34effbd85225cd0c8722..bddce62b0d6a287bcb76f243dfdc698c16ef38ce 100644 --- a/lib/ui/screens/fifth_screen.dart +++ b/lib/ui/screens/fifth_screen.dart @@ -6,8 +6,11 @@ import 'package:share_plus/share_plus.dart'; import '../../data/models/app_cubit.dart'; import '../../data/models/app_state.dart'; +import '../../data/models/cesium_card.dart'; +import '../../data/models/credit_card_themes.dart'; import '../../data/models/theme_cubit.dart'; import '../../g1/currency.dart'; +import '../../g1/g1_helper.dart'; import '../../shared_prefs.dart'; import '../tutorial.dart'; import '../tutorial_keys.dart'; @@ -253,11 +256,25 @@ class _FifthScreenState extends State<FifthScreen> { } else { // if (method == 'clipboard') { return ImportClipboardDialog(onImport: (String wallet) { - showDialog( - context: context, - builder: (BuildContext context) { - return ImportDialog(wallet: wallet); - }); + if (validateKey(wallet)) { + // It's a pubkey, let's think is a cesium wallet + if (!SharedPreferencesHelper().has(wallet)) { + SharedPreferencesHelper().addCesiumCard(CesiumCard( + name: '', + theme: CreditCardThemes.theme2, + pubKey: extractPublicKey(wallet), + seed: CesiumCard.unknown)); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(tr('wallet_already_imported')))); + } + } else { + showDialog( + context: context, + builder: (BuildContext context) { + return ImportDialog(wallet: wallet); + }); + } }); } }, diff --git a/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart b/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart index 7ae0d7c71292a4e89c3258289824c012487d221c..1f03e6cf33af1fea042c4195dda05274d48e54bb 100644 --- a/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart +++ b/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart @@ -34,7 +34,7 @@ class _ImportClipboardDialogState extends State<ImportClipboardDialog> { Text(tr('import_wallet_from_clipboard_desc')), TextField( controller: _textController, - maxLines: 5, + maxLines: 3, decoration: InputDecoration(hintText: tr('paste_here')), ), const SizedBox(height: 10), diff --git a/lib/ui/widgets/first_screen/card_stack.dart b/lib/ui/widgets/first_screen/card_stack.dart index 8b49bab1ffaf26b2e9cf4866ea3b60670d38fb4b..bf8a08094e8685cfd9f125c1709a3aa23c1e1d14 100644 --- a/lib/ui/widgets/first_screen/card_stack.dart +++ b/lib/ui/widgets/first_screen/card_stack.dart @@ -19,13 +19,13 @@ class _CardStackState extends State<CardStack> { alignment: Alignment.center, children: <Widget>[ ...List<Widget>.generate( - 1, + SharedPreferencesHelper().cesiumCards.length, (int index) => Positioned( top: 50.0 * index, child: SizedBox( height: 200, child: CreditCardMini( - pubKey: SharedPreferencesHelper().getPubKey())), + card: SharedPreferencesHelper().cards[index])), ), ), Positioned( diff --git a/lib/ui/widgets/first_screen/credit_card_mini.dart b/lib/ui/widgets/first_screen/credit_card_mini.dart index b38e535dfe9bddfe31980eba0cd4bca0b93ed809..5668103e9279e5fd5eb2853ad8203d1ebb95965c 100644 --- a/lib/ui/widgets/first_screen/credit_card_mini.dart +++ b/lib/ui/widgets/first_screen/credit_card_mini.dart @@ -1,15 +1,15 @@ import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; -import '../../../shared_prefs.dart'; +import '../../../data/models/cesium_card.dart'; +import '../../../data/models/credit_card_themes.dart'; import '../../ui_helpers.dart'; import 'card_name_editable.dart'; import 'card_text_style.dart'; class CreditCardMini extends StatelessWidget { - const CreditCardMini({super.key, required this.pubKey}); + const CreditCardMini({super.key, required this.card}); - final String pubKey; + final CesiumCard card; @override Widget build(BuildContext context) { @@ -39,8 +39,10 @@ class CreditCardMini extends StatelessWidget { begin: Alignment.bottomLeft, end: Alignment.topRight, colors: <Color>[ - Color(int.parse("${dotenv.env['CARD_COLOR_LEFT']}")), - Color(int.parse("${dotenv.env['CARD_COLOR_RIGHT']}")), + CreditCardThemes.theme3.primaryColor, + CreditCardThemes.theme3.secondaryColor, + // card.theme.primaryColor, + // card.theme.secondaryColor, ], ), ), @@ -58,18 +60,18 @@ class CreditCardMini extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, // mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ - Padding( - padding: EdgeInsets.symmetric( - horizontal: cardInternalElPadding, - vertical: cardInternalElPadding), - child: Row(children: <Widget>[ - Expanded( - child: CardNameText( - currentText: - SharedPreferencesHelper().getName(), - onTap: () {}, - )), - ])), + if (card.name.isNotEmpty) + Padding( + padding: EdgeInsets.symmetric( + horizontal: cardInternalElPadding, + vertical: cardInternalElPadding), + child: Row(children: <Widget>[ + Expanded( + child: CardNameText( + currentText: card.name, + onTap: () {}, + )), + ])), Padding( padding: EdgeInsets.symmetric( horizontal: cardInternalElPadding, @@ -78,11 +80,11 @@ class CreditCardMini extends StatelessWidget { GestureDetector( onTap: () => showQrDialog( context: context, - publicKey: pubKey), + publicKey: card.pubKey), child: FittedBox( fit: BoxFit.scaleDown, child: Text( - '${pubKey.substring(0, 4)} ${pubKey.substring(4, 8)}', + '${card.pubKey.substring(0, 4)} ${card.pubKey.substring(4, 8)}', style: cardTextStyle(context, fontSize: 16), ))),