From a441000c3977fb8d7b77f789ed9575ea27eb1b74 Mon Sep 17 00:00:00 2001 From: vjrj <vjrj@comunes.org> Date: Sat, 19 Aug 2023 10:53:29 +0200 Subject: [PATCH] Import on add --- lib/ui/screens/fifth_screen.dart | 74 +----------------- lib/ui/widgets/card_drawer.dart | 26 ------- .../widgets/fifth_screen/import_dialog.dart | 68 ++++++++++++++++ .../first_screen/card_name_editable.dart | 2 + lib/ui/widgets/first_screen/card_stack.dart | 12 ++- .../first_screen/credit_card_mini.dart | 78 ++++++++++--------- 6 files changed, 123 insertions(+), 137 deletions(-) diff --git a/lib/ui/screens/fifth_screen.dart b/lib/ui/screens/fifth_screen.dart index 987a0b19..9b259b41 100644 --- a/lib/ui/screens/fifth_screen.dart +++ b/lib/ui/screens/fifth_screen.dart @@ -7,11 +7,8 @@ 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_helper.dart'; import '../tutorial.dart'; import '../tutorial_keys.dart'; @@ -22,7 +19,6 @@ import '../widgets/faq.dart'; import '../widgets/fifth_screen/export_dialog.dart'; import '../widgets/fifth_screen/fifth_tutorial.dart'; import '../widgets/fifth_screen/grid_item.dart'; -import '../widgets/fifth_screen/import_clipboard_dialog.dart'; import '../widgets/fifth_screen/import_dialog.dart'; import '../widgets/fifth_screen/link_card.dart'; import '../widgets/fifth_screen/node_info.dart'; @@ -193,9 +189,8 @@ class _FifthScreenState extends State<FifthScreen> { GridItem( title: 'import_key', icon: Icons.upload, - onTap: () { - _showSelectImportMethodDialog(); - }), + onTap: () => + showSelectImportMethodDialog(context)), ]), SwitchListTile( title: Text(tr('expert_mode')), @@ -243,49 +238,6 @@ class _FifthScreenState extends State<FifthScreen> { }); } - Future<void> _showSelectImportMethodDialog() async { - final String? method = await showDialog<String>( - context: context, - builder: (BuildContext context) => const SelectImportMethodDialog(), - ); - if (method != null) { - if (!mounted) { - return; - } - showDialog( - context: context, - builder: (BuildContext context) { - if (method == 'file') { - return const ImportDialog(); - } else { - // if (method == 'clipboard') { - return ImportClipboardDialog(onImport: (String 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); - }); - } - }); - } - }, - ); - } - } - Future<void> _showSelectExportMethodDialog() async { final ExportType? method = await showDialog<ExportType>( context: context, @@ -305,28 +257,6 @@ class _FifthScreenState extends State<FifthScreen> { } } -class SelectImportMethodDialog extends StatelessWidget { - const SelectImportMethodDialog({super.key}); - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: Text(tr('select_import_method')), - // content: Text(tr('select_import_method_desc')), - actions: <Widget>[ - TextButton.icon( - icon: const Icon(Icons.file_present), - label: Text(tr('file_import')), - onPressed: () => Navigator.of(context).pop('file')), - TextButton.icon( - icon: const Icon(Icons.content_paste), - label: Text(tr('clipboard_import')), - onPressed: () => Navigator.of(context).pop('clipboard')), - ], - ); - } -} - class SelectExportMethodDialog extends StatelessWidget { const SelectExportMethodDialog({super.key}); diff --git a/lib/ui/widgets/card_drawer.dart b/lib/ui/widgets/card_drawer.dart index 46d1a9cf..ffbc1863 100644 --- a/lib/ui/widgets/card_drawer.dart +++ b/lib/ui/widgets/card_drawer.dart @@ -57,32 +57,6 @@ class CardDrawer extends StatelessWidget { child: CardStack(), ), ), - // Expanded(child: Container()), - /* if (!kReleaseMode) - Expanded( - child: Container( - decoration: const BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - ), - ), - child: ListView.builder( - shrinkWrap: true, - itemCount: cards.length, - itemBuilder: (BuildContext context, int index) { - final CesiumCard card = cards[index]; - return InkWell( - onTap: () { - SharedPreferencesHelper() - .selectCurrentWallet(index); - Navigator.pop(context); - }, - child: Text(card.pubKey), - ); - }, - ), - ), - ), */ if (inDevelopment) ListTile( leading: const Icon(Icons.build), diff --git a/lib/ui/widgets/fifth_screen/import_dialog.dart b/lib/ui/widgets/fifth_screen/import_dialog.dart index 01f4b057..acad8a4f 100644 --- a/lib/ui/widgets/fifth_screen/import_dialog.dart +++ b/lib/ui/widgets/fifth_screen/import_dialog.dart @@ -11,12 +11,15 @@ import 'package:pattern_lock/pattern_lock.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:universal_html/html.dart' as html; +import '../../../data/models/cesium_card.dart'; +import '../../../data/models/credit_card_themes.dart'; import '../../../data/models/transaction_cubit.dart'; import '../../../g1/g1_helper.dart'; import '../../../shared_prefs_helper.dart'; import '../../logger.dart'; import '../../ui_helpers.dart'; import '../custom_error_widget.dart'; +import 'import_clipboard_dialog.dart'; import 'pattern_util.dart'; class ImportDialog extends StatefulWidget { @@ -273,3 +276,68 @@ class _ImportDialogState extends State<ImportDialog> { ); } } + +Future<void> showSelectImportMethodDialog(BuildContext context) async { + final String? method = await showDialog<String>( + context: context, + builder: (BuildContext context) => const SelectImportMethodDialog(), + ); + if (method != null) { + if (!context.mounted) { + return; + } + showDialog( + context: context, + builder: (BuildContext context) { + if (method == 'file') { + return const ImportDialog(); + } else { + // if (method == 'clipboard') { + return ImportClipboardDialog(onImport: (String 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); + }); + } + }); + } + }, + ); + } +} + +class SelectImportMethodDialog extends StatelessWidget { + const SelectImportMethodDialog({super.key}); + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text(tr('select_import_method')), + // content: Text(tr('select_import_method_desc')), + actions: <Widget>[ + TextButton.icon( + icon: const Icon(Icons.file_present), + label: Text(tr('file_import')), + onPressed: () => Navigator.of(context).pop('file')), + TextButton.icon( + icon: const Icon(Icons.content_paste), + label: Text(tr('clipboard_import')), + onPressed: () => Navigator.of(context).pop('clipboard')), + ], + ); + } +} diff --git a/lib/ui/widgets/first_screen/card_name_editable.dart b/lib/ui/widgets/first_screen/card_name_editable.dart index 6668150b..74b12b8d 100644 --- a/lib/ui/widgets/first_screen/card_name_editable.dart +++ b/lib/ui/widgets/first_screen/card_name_editable.dart @@ -79,6 +79,8 @@ class _CardNameEditableState extends State<CardNameEditable> { @override Widget build(BuildContext context) { + /* return Consumer<SharedPreferencesHelper>(builder: (BuildContext context, + SharedPreferencesHelper prefsHelper, Widget? child) { */ return FutureBuilder<String>( future: _initValue(), builder: (BuildContext context, AsyncSnapshot<String> snapshot) { diff --git a/lib/ui/widgets/first_screen/card_stack.dart b/lib/ui/widgets/first_screen/card_stack.dart index b02c0f27..a6c154eb 100644 --- a/lib/ui/widgets/first_screen/card_stack.dart +++ b/lib/ui/widgets/first_screen/card_stack.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import '../../../data/models/cesium_card.dart'; import '../../../shared_prefs_helper.dart'; import '../../logger.dart'; +import '../fifth_screen/import_dialog.dart'; import 'credit_card_mini.dart'; class CardStack extends StatefulWidget { @@ -21,9 +22,9 @@ class _CardStackState extends State<CardStack> { return Consumer<SharedPreferencesHelper>(builder: (BuildContext context, SharedPreferencesHelper prefsHelper, Widget? child) { final List<CesiumCard> cards = - List<CesiumCard>.from(SharedPreferencesHelper().cesiumCards); + List<CesiumCard>.from(SharedPreferencesHelper().cesiumCards); final int currentIndex = - SharedPreferencesHelper().getCurrentWalletIndex(); + SharedPreferencesHelper().getCurrentWalletIndex(); logger('Current wallet index is $currentIndex of ${cards.length}'); final CesiumCard currentItem = cards.removeAt(currentIndex); cards.add(currentItem); @@ -33,7 +34,7 @@ class _CardStackState extends State<CardStack> { children: <Widget>[ ...List<Widget>.generate( walletsSize, - (int index) { + (int index) { return Positioned( top: 50.0 * index, child: SizedBox( @@ -66,7 +67,10 @@ class _CardStackState extends State<CardStack> { side: const BorderSide(color: Colors.grey, width: 1.0), borderRadius: BorderRadius.circular(20), ), */ - onPressed: () {}, + onPressed: () { + Navigator.pop(context); + showSelectImportMethodDialog(context); + }, child: const Icon(Icons.add), ), )) diff --git a/lib/ui/widgets/first_screen/credit_card_mini.dart b/lib/ui/widgets/first_screen/credit_card_mini.dart index df9faad8..de6c68ef 100644 --- a/lib/ui/widgets/first_screen/credit_card_mini.dart +++ b/lib/ui/widgets/first_screen/credit_card_mini.dart @@ -45,10 +45,7 @@ class CreditCardMini extends StatelessWidget { return Padding( padding: const EdgeInsets.all(10), child: GestureDetector( - onTap: () { - SharedPreferencesHelper().selectCurrentWallet(card); - Navigator.pop(context); - }, + onTap: () => onCardTap(context), child: Card( elevation: 8.0, shape: RoundedRectangleBorder( @@ -122,38 +119,49 @@ class CreditCardMini extends StatelessWidget { width: 100, height: 100), )), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - // mainAxisAlignment: MainAxisAlignment.start, - children: <Widget>[ - 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, - vertical: cardInternalElPadding), - child: Row(children: <Widget>[ - FittedBox( - fit: BoxFit.scaleDown, - child: Text( - '${card.pubKey.substring(0, 4)} ${card.pubKey.substring(4, 8)}', - style: cardTextStyle(context, - fontSize: 16), - )), - ])), - if (bigDevice) const SizedBox(height: 6.0), - const SizedBox(height: 8.0), - ]), + GestureDetector( + onTap: () => onCardTap(context), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.start, + children: <Widget>[ + 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, + vertical: cardInternalElPadding), + child: Row(children: <Widget>[ + FittedBox( + fit: BoxFit.scaleDown, + child: Text( + '${card.pubKey.substring(0, 4)} ${card.pubKey.substring(4, 8)}', + style: cardTextStyle(context, + fontSize: 16), + )), + ])), + if (bigDevice) + const SizedBox(height: 6.0), + const SizedBox(height: 8.0), + ])), ]), )))))); } + + void onCardTap(BuildContext context) { + SharedPreferencesHelper().selectCurrentWallet(card); + Navigator.pop(context); + } } -- GitLab