diff --git a/assets/svg/enabled-button.svg b/assets/svg/enabled-button.svg
new file mode 100644
index 000000000..a26359e81
--- /dev/null
+++ b/assets/svg/enabled-button.svg
@@ -0,0 +1,4 @@
+
diff --git a/lib/pages/receive_view/generate_receiving_uri_qr_code_view.dart b/lib/pages/receive_view/generate_receiving_uri_qr_code_view.dart
index 4c3c4c968..ae615bd96 100644
--- a/lib/pages/receive_view/generate_receiving_uri_qr_code_view.dart
+++ b/lib/pages/receive_view/generate_receiving_uri_qr_code_view.dart
@@ -11,6 +11,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:share_plus/share_plus.dart';
import 'package:stackwallet/notifications/show_flush_bar.dart';
+import 'package:stackwallet/utilities/address_utils.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/clipboard_interface.dart';
import 'package:stackwallet/utilities/constants.dart';
@@ -101,25 +102,28 @@ class _GenerateUriQrCodeViewState extends State {
return null;
}
- String query = "";
+ Map queryParams = {};
if (amountString.isNotEmpty) {
- query += "amount=$amountString";
+ queryParams["amount"] = amountString;
}
if (noteString.isNotEmpty) {
- if (query.isNotEmpty) {
- query += "&";
- }
- query += "message=$noteString";
+ queryParams["message"] = noteString;
}
- final uri = Uri(
- scheme: widget.coin.uriScheme,
- host: widget.receivingAddress,
- query: query.isNotEmpty ? query : null,
- );
+ String receivingAddress = widget.receivingAddress;
+ if ((widget.coin == Coin.bitcoincash ||
+ widget.coin == Coin.bitcoincashTestnet) &&
+ receivingAddress.contains(":")) {
+ // remove cash addr prefix
+ receivingAddress = receivingAddress.split(":").sublist(1).join();
+ }
- final uriString = uri.toString().replaceFirst("://", ":");
+ final uriString = AddressUtils.buildUriString(
+ widget.coin,
+ receivingAddress,
+ queryParams,
+ );
Logging.instance.log("Generated receiving QR code for: $uriString",
level: LogLevel.Info);
@@ -229,10 +233,21 @@ class _GenerateUriQrCodeViewState extends State {
@override
void initState() {
isDesktop = Util.isDesktop;
- _uriString = Uri(
- scheme: widget.coin.uriScheme,
- host: widget.receivingAddress,
- ).toString().replaceFirst("://", ":");
+
+ String receivingAddress = widget.receivingAddress;
+ if ((widget.coin == Coin.bitcoincash ||
+ widget.coin == Coin.bitcoincashTestnet) &&
+ receivingAddress.contains(":")) {
+ // remove cash addr prefix
+ receivingAddress = receivingAddress.split(":").sublist(1).join();
+ }
+
+ _uriString = AddressUtils.buildUriString(
+ widget.coin,
+ receivingAddress,
+ {},
+ );
+
amountController = TextEditingController();
noteController = TextEditingController();
super.initState();
diff --git a/lib/pages/settings_views/global_settings_view/stack_backup_views/restore_from_file_view.dart b/lib/pages/settings_views/global_settings_view/stack_backup_views/restore_from_file_view.dart
index a237d9ea9..ee1fcf666 100644
--- a/lib/pages/settings_views/global_settings_view/stack_backup_views/restore_from_file_view.dart
+++ b/lib/pages/settings_views/global_settings_view/stack_backup_views/restore_from_file_view.dart
@@ -9,7 +9,7 @@ import 'package:stackwallet/notifications/show_flush_bar.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/helpers/stack_file_system.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/sub_views/stack_restore_progress_view.dart';
-import 'package:stackwallet/pages_desktop_specific/home/settings_menu/backup_and_restore/restore_backup_dialog.dart';
+// import 'package:stackwallet/pages_desktop_specific/home/settings_menu/backup_and_restore/restore_backup_dialog.dart';
import 'package:stackwallet/route_generator.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/constants.dart';
@@ -20,6 +20,8 @@ import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'package:stackwallet/utilities/util.dart';
import 'package:stackwallet/widgets/conditional_parent.dart';
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
+import 'package:stackwallet/widgets/desktop/desktop_dialog.dart';
+import 'package:stackwallet/widgets/desktop/desktop_dialog_close_button.dart';
import 'package:stackwallet/widgets/desktop/primary_button.dart';
import 'package:stackwallet/widgets/desktop/secondary_button.dart';
import 'package:stackwallet/widgets/loading_indicator.dart';
@@ -47,14 +49,14 @@ class _RestoreFromFileViewState extends ConsumerState {
bool hidePassword = true;
Future restoreBackupPopup(BuildContext context) async {
- await showDialog(
- context: context,
- useSafeArea: false,
- barrierDismissible: true,
- builder: (context) {
- return const RestoreBackupDialog();
- },
- );
+ // await showDialog(
+ // context: context,
+ // useSafeArea: false,
+ // barrierDismissible: true,
+ // builder: (context) {
+ // return const RestoreBackupDialog();
+ // },
+ // );
}
@override
@@ -500,14 +502,73 @@ class _RestoreFromFileViewState extends ConsumerState {
return;
}
- await Navigator.of(context).push(
- RouteGenerator.getRoute(
- builder: (_) =>
- StackRestoreProgressView(
- jsonString: jsonString,
- ),
- ),
- );
+ await showDialog(
+ context: context,
+ useSafeArea: false,
+ barrierDismissible: true,
+ builder: (context) {
+ return DesktopDialog(
+ maxHeight: 750,
+ maxWidth: 600,
+ child: LayoutBuilder(
+ builder: (context, constraints) {
+ return SingleChildScrollView(
+ child: ConstrainedBox(
+ constraints: BoxConstraints(
+ minHeight:
+ constraints.maxHeight,
+ ),
+ child: IntrinsicHeight(
+ child: Column(
+ mainAxisAlignment:
+ MainAxisAlignment
+ .start,
+ children: [
+ Row(
+ mainAxisAlignment:
+ MainAxisAlignment
+ .spaceBetween,
+ children: [
+ Padding(
+ padding:
+ const EdgeInsets
+ .all(32),
+ child: Text(
+ "Restoring Stack Wallet",
+ style: STextStyles
+ .desktopH3(
+ context),
+ textAlign:
+ TextAlign
+ .center,
+ ),
+ ),
+ const DesktopDialogCloseButton(),
+ ],
+ ),
+ const SizedBox(
+ height: 30,
+ ),
+ Padding(
+ padding: EdgeInsets
+ .symmetric(
+ horizontal:
+ 32),
+ child:
+ StackRestoreProgressView(
+ jsonString:
+ jsonString,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ },
+ ),
+ );
+ });
}
},
),
diff --git a/lib/pages/settings_views/global_settings_view/stack_backup_views/sub_views/stack_restore_progress_view.dart b/lib/pages/settings_views/global_settings_view/stack_backup_views/sub_views/stack_restore_progress_view.dart
index 5e5142425..7dec4e740 100644
--- a/lib/pages/settings_views/global_settings_view/stack_backup_views/sub_views/stack_restore_progress_view.dart
+++ b/lib/pages/settings_views/global_settings_view/stack_backup_views/sub_views/stack_restore_progress_view.dart
@@ -3,7 +3,6 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:stackwallet/pages/home_view/home_view.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/dialogs/cancel_stack_restore_dialog.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/restore_from_encrypted_string_view.dart';
@@ -17,6 +16,8 @@ import 'package:stackwallet/utilities/enums/stack_restoring_status.dart';
import 'package:stackwallet/utilities/logger.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart';
+import 'package:stackwallet/utilities/util.dart';
+import 'package:stackwallet/widgets/conditional_parent.dart';
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
import 'package:stackwallet/widgets/icon_widgets/addressbook_icon.dart';
import 'package:stackwallet/widgets/loading_indicator.dart';
@@ -39,6 +40,8 @@ class StackRestoreProgressView extends ConsumerStatefulWidget {
class _StackRestoreProgressViewState
extends ConsumerState {
+ bool isDesktop = Util.isDesktop;
+
Future _cancel() async {
bool shouldPop = false;
unawaited(showDialog(
@@ -79,10 +82,15 @@ class _StackRestoreProgressViewState
await SWB.cancelRestore();
shouldPop = true;
+
+ int count = 0;
+
if (mounted) {
- Navigator.of(context).popUntil(ModalRoute.withName(widget.fromFile
- ? RestoreFromEncryptedStringView.routeName
- : StackBackupView.routeName));
+ !isDesktop
+ ? Navigator.of(context).popUntil(ModalRoute.withName(widget.fromFile
+ ? RestoreFromEncryptedStringView.routeName
+ : StackBackupView.routeName))
+ : Navigator.of(context).popUntil((_) => count++ >= 2);
}
}
@@ -179,281 +187,289 @@ class _StackRestoreProgressViewState
@override
Widget build(BuildContext context) {
- return WillPopScope(
- onWillPop: _onWillPop,
- child: Scaffold(
- backgroundColor: Theme.of(context).extension()!.background,
- appBar: AppBar(
- leading: AppBarBackButton(
- onPressed: () async {
- if (FocusScope.of(context).hasFocus) {
- FocusScope.of(context).unfocus();
- await Future.delayed(const Duration(milliseconds: 75));
- }
- if (_success) {
- _addWalletsToHomeView();
- if (mounted) {
- Navigator.of(context).pop();
- }
- } else {
- if (await _requestCancel()) {
- await _cancel();
- }
- }
- },
- ),
- title: Text(
- "Restoring Stack wallet",
- style: STextStyles.navBarTitle(context),
- ),
- ),
- body: Padding(
- padding: const EdgeInsets.only(
- left: 12,
- top: 12,
- right: 12,
- ),
- child: SingleChildScrollView(
- child: Padding(
- padding: const EdgeInsets.only(
- left: 4,
- top: 4,
- right: 4,
- bottom: 0,
+ bool isDesktop = Util.isDesktop;
+
+ return ConditionalParent(
+ condition: !isDesktop,
+ builder: (child) {
+ return WillPopScope(
+ onWillPop: _onWillPop,
+ child: Scaffold(
+ backgroundColor:
+ Theme.of(context).extension()!.background,
+ appBar: AppBar(
+ leading: AppBarBackButton(
+ onPressed: () async {
+ if (FocusScope.of(context).hasFocus) {
+ FocusScope.of(context).unfocus();
+ await Future.delayed(
+ const Duration(milliseconds: 75));
+ }
+ if (_success) {
+ _addWalletsToHomeView();
+ if (mounted) {
+ Navigator.of(context).pop();
+ }
+ } else {
+ if (await _requestCancel()) {
+ await _cancel();
+ }
+ }
+ },
),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- "Settings",
- style: STextStyles.itemSubtitle(context),
- ),
- const SizedBox(
- height: 12,
- ),
- Consumer(
- builder: (_, ref, __) {
- final state = ref.watch(stackRestoringUIStateProvider
- .select((value) => value.preferences));
- return RestoringItemCard(
- left: SizedBox(
- width: 32,
- height: 32,
- child: RoundedContainer(
- padding: const EdgeInsets.all(0),
+ title: Text(
+ "Restoring Stack wallet",
+ style: STextStyles.navBarTitle(context),
+ ),
+ ),
+ body: Padding(
+ padding: const EdgeInsets.only(
+ left: 12,
+ top: 12,
+ right: 12,
+ ),
+ child: child,
+ ),
+ ),
+ );
+ },
+ child: SingleChildScrollView(
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 4,
+ top: 4,
+ right: 4,
+ bottom: 0,
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ "Settings",
+ style: STextStyles.itemSubtitle(context),
+ ),
+ const SizedBox(
+ height: 12,
+ ),
+ Consumer(
+ builder: (_, ref, __) {
+ final state = ref.watch(stackRestoringUIStateProvider
+ .select((value) => value.preferences));
+ return RestoringItemCard(
+ left: SizedBox(
+ width: 32,
+ height: 32,
+ child: RoundedContainer(
+ padding: const EdgeInsets.all(0),
+ color: Theme.of(context)
+ .extension()!
+ .buttonBackSecondary,
+ child: Center(
+ child: SvgPicture.asset(
+ Assets.svg.gear,
+ width: 16,
+ height: 16,
color: Theme.of(context)
.extension()!
- .buttonBackSecondary,
- child: Center(
- child: SvgPicture.asset(
- Assets.svg.gear,
- width: 16,
- height: 16,
- color: Theme.of(context)
- .extension()!
- .accentColorDark,
- ),
- ),
- ),
- ),
- right: SizedBox(
- width: 20,
- height: 20,
- child: _getIconForState(state),
- ),
- title: "Preferences",
- subTitle: state == StackRestoringStatus.failed
- ? Text(
- "Something went wrong",
- style: STextStyles.errorSmall(context),
- )
- : null,
- );
- },
- ),
- const SizedBox(
- height: 12,
- ),
- Consumer(
- builder: (_, ref, __) {
- final state = ref.watch(stackRestoringUIStateProvider
- .select((value) => value.addressBook));
- return RestoringItemCard(
- left: SizedBox(
- width: 32,
- height: 32,
- child: RoundedContainer(
- padding: const EdgeInsets.all(0),
- color: Theme.of(context)
- .extension()!
- .buttonBackSecondary,
- child: Center(
- child: AddressBookIcon(
- width: 16,
- height: 16,
- color: Theme.of(context)
- .extension()!
- .accentColorDark,
- ),
- ),
- ),
- ),
- right: SizedBox(
- width: 20,
- height: 20,
- child: _getIconForState(state),
- ),
- title: "Address book",
- subTitle: state == StackRestoringStatus.failed
- ? Text(
- "Something went wrong",
- style: STextStyles.errorSmall(context),
- )
- : null,
- );
- },
- ),
- const SizedBox(
- height: 12,
- ),
- Consumer(
- builder: (_, ref, __) {
- final state = ref.watch(stackRestoringUIStateProvider
- .select((value) => value.nodes));
- return RestoringItemCard(
- left: SizedBox(
- width: 32,
- height: 32,
- child: RoundedContainer(
- padding: const EdgeInsets.all(0),
- color: Theme.of(context)
- .extension()!
- .buttonBackSecondary,
- child: Center(
- child: SvgPicture.asset(
- Assets.svg.node,
- width: 16,
- height: 16,
- color: Theme.of(context)
- .extension()!
- .accentColorDark,
- ),
- ),
- ),
- ),
- right: SizedBox(
- width: 20,
- height: 20,
- child: _getIconForState(state),
- ),
- title: "Nodes",
- subTitle: state == StackRestoringStatus.failed
- ? Text(
- "Something went wrong",
- style: STextStyles.errorSmall(context),
- )
- : null,
- );
- },
- ),
- const SizedBox(
- height: 12,
- ),
- Consumer(
- builder: (_, ref, __) {
- final state = ref.watch(stackRestoringUIStateProvider
- .select((value) => value.trades));
- return RestoringItemCard(
- left: SizedBox(
- width: 32,
- height: 32,
- child: RoundedContainer(
- padding: const EdgeInsets.all(0),
- color: Theme.of(context)
- .extension()!
- .buttonBackSecondary,
- child: Center(
- child: SvgPicture.asset(
- Assets.svg.arrowRotate2,
- width: 16,
- height: 16,
- color: Theme.of(context)
- .extension()!
- .accentColorDark,
- ),
- ),
- ),
- ),
- right: SizedBox(
- width: 20,
- height: 20,
- child: _getIconForState(state),
- ),
- title: "Exchange history",
- subTitle: state == StackRestoringStatus.failed
- ? Text(
- "Something went wrong",
- style: STextStyles.errorSmall(context),
- )
- : null,
- );
- },
- ),
- const SizedBox(
- height: 16,
- ),
- Text(
- "Wallets",
- style: STextStyles.itemSubtitle(context),
- ),
- const SizedBox(
- height: 8,
- ),
- ...ref
- .watch(stackRestoringUIStateProvider
- .select((value) => value.walletStateProviders))
- .values
- .map(
- (provider) => Padding(
- padding: const EdgeInsets.symmetric(vertical: 4),
- child: RestoringWalletCard(
- provider: provider,
+ .accentColorDark,
),
),
),
- const SizedBox(
- height: 80,
+ ),
+ right: SizedBox(
+ width: 20,
+ height: 20,
+ child: _getIconForState(state),
+ ),
+ title: "Preferences",
+ subTitle: state == StackRestoringStatus.failed
+ ? Text(
+ "Something went wrong",
+ style: STextStyles.errorSmall(context),
+ )
+ : null,
+ );
+ },
+ ),
+ const SizedBox(
+ height: 12,
+ ),
+ Consumer(
+ builder: (_, ref, __) {
+ final state = ref.watch(stackRestoringUIStateProvider
+ .select((value) => value.addressBook));
+ return RestoringItemCard(
+ left: SizedBox(
+ width: 32,
+ height: 32,
+ child: RoundedContainer(
+ padding: const EdgeInsets.all(0),
+ color: Theme.of(context)
+ .extension()!
+ .buttonBackSecondary,
+ child: Center(
+ child: AddressBookIcon(
+ width: 16,
+ height: 16,
+ color: Theme.of(context)
+ .extension()!
+ .accentColorDark,
+ ),
+ ),
+ ),
+ ),
+ right: SizedBox(
+ width: 20,
+ height: 20,
+ child: _getIconForState(state),
+ ),
+ title: "Address book",
+ subTitle: state == StackRestoringStatus.failed
+ ? Text(
+ "Something went wrong",
+ style: STextStyles.errorSmall(context),
+ )
+ : null,
+ );
+ },
+ ),
+ const SizedBox(
+ height: 12,
+ ),
+ Consumer(
+ builder: (_, ref, __) {
+ final state = ref.watch(stackRestoringUIStateProvider
+ .select((value) => value.nodes));
+ return RestoringItemCard(
+ left: SizedBox(
+ width: 32,
+ height: 32,
+ child: RoundedContainer(
+ padding: const EdgeInsets.all(0),
+ color: Theme.of(context)
+ .extension()!
+ .buttonBackSecondary,
+ child: Center(
+ child: SvgPicture.asset(
+ Assets.svg.node,
+ width: 16,
+ height: 16,
+ color: Theme.of(context)
+ .extension()!
+ .accentColorDark,
+ ),
+ ),
+ ),
+ ),
+ right: SizedBox(
+ width: 20,
+ height: 20,
+ child: _getIconForState(state),
+ ),
+ title: "Nodes",
+ subTitle: state == StackRestoringStatus.failed
+ ? Text(
+ "Something went wrong",
+ style: STextStyles.errorSmall(context),
+ )
+ : null,
+ );
+ },
+ ),
+ const SizedBox(
+ height: 12,
+ ),
+ Consumer(
+ builder: (_, ref, __) {
+ final state = ref.watch(stackRestoringUIStateProvider
+ .select((value) => value.trades));
+ return RestoringItemCard(
+ left: SizedBox(
+ width: 32,
+ height: 32,
+ child: RoundedContainer(
+ padding: const EdgeInsets.all(0),
+ color: Theme.of(context)
+ .extension()!
+ .buttonBackSecondary,
+ child: Center(
+ child: SvgPicture.asset(
+ Assets.svg.arrowRotate2,
+ width: 16,
+ height: 16,
+ color: Theme.of(context)
+ .extension()!
+ .accentColorDark,
+ ),
+ ),
+ ),
+ ),
+ right: SizedBox(
+ width: 20,
+ height: 20,
+ child: _getIconForState(state),
+ ),
+ title: "Exchange history",
+ subTitle: state == StackRestoringStatus.failed
+ ? Text(
+ "Something went wrong",
+ style: STextStyles.errorSmall(context),
+ )
+ : null,
+ );
+ },
+ ),
+ const SizedBox(
+ height: 16,
+ ),
+ Text(
+ "Wallets",
+ style: STextStyles.itemSubtitle(context),
+ ),
+ const SizedBox(
+ height: 8,
+ ),
+ ...ref
+ .watch(stackRestoringUIStateProvider
+ .select((value) => value.walletStateProviders))
+ .values
+ .map(
+ (provider) => Padding(
+ padding: const EdgeInsets.symmetric(vertical: 4),
+ child: RestoringWalletCard(
+ provider: provider,
+ ),
+ ),
),
- ],
+ const SizedBox(
+ height: 30,
),
- ),
- ),
- ),
- floatingActionButton: SizedBox(
- width: MediaQuery.of(context).size.width - 32,
- child: TextButton(
- onPressed: () async {
- if (_success) {
- _addWalletsToHomeView();
- Navigator.of(context)
- .popUntil(ModalRoute.withName(HomeView.routeName));
- } else {
- if (await _requestCancel()) {
- await _cancel();
- }
- }
- },
- style: Theme.of(context)
- .extension()!
- .getPrimaryEnabledButtonColor(context),
- child: Text(
- _success ? "OK" : "Cancel restore process",
- style: STextStyles.button(context).copyWith(
- color: Theme.of(context)
- .extension()!
- .buttonTextPrimary,
+ SizedBox(
+ width: MediaQuery.of(context).size.width - 32,
+ child: TextButton(
+ onPressed: () async {
+ if (_success) {
+ Navigator.of(context).pop();
+ } else {
+ if (await _requestCancel()) {
+ await _cancel();
+ }
+ }
+ },
+ style: Theme.of(context)
+ .extension()!
+ .getPrimaryEnabledButtonColor(context),
+ child: Text(
+ _success ? "OK" : "Cancel restore process",
+ style: STextStyles.button(context).copyWith(
+ color: Theme.of(context)
+ .extension()!
+ .buttonTextPrimary,
+ ),
+ ),
+ ),
),
- ),
+ ],
),
),
),
diff --git a/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/backup_and_restore_settings.dart b/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/backup_and_restore_settings.dart
index a444f4b51..3ea6cea6c 100644
--- a/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/backup_and_restore_settings.dart
+++ b/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/backup_and_restore_settings.dart
@@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:intl/intl.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/create_backup_view.dart';
import 'package:stackwallet/pages/settings_views/global_settings_view/stack_backup_views/restore_from_file_view.dart';
+import 'package:stackwallet/pages_desktop_specific/home/settings_menu/backup_and_restore/create_auto_backup.dart';
import 'package:stackwallet/pages_desktop_specific/home/settings_menu/backup_and_restore/enable_backup_dialog.dart';
import 'package:stackwallet/providers/global/locale_provider.dart';
import 'package:stackwallet/providers/global/prefs_provider.dart';
@@ -36,7 +37,6 @@ class BackupRestoreSettings extends ConsumerStatefulWidget {
class _BackupRestoreSettings extends ConsumerState {
late bool createBackup = false;
late bool restoreBackup = false;
- // late bool isEnabledAutoBackup;
final toggleController = DSBController();
@@ -91,6 +91,17 @@ class _BackupRestoreSettings extends ConsumerState {
);
}
+ Future createAutoBackup() async {
+ await showDialog(
+ context: context,
+ useSafeArea: false,
+ barrierDismissible: true,
+ builder: (context) {
+ return CreateAutoBackup();
+ },
+ );
+ }
+
Future attemptDisable() async {
final result = await showDialog(
context: context,
@@ -208,10 +219,25 @@ class _BackupRestoreSettings extends ConsumerState {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- SvgPicture.asset(
- Assets.svg.backupAuto,
- width: 48,
- height: 48,
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ SvgPicture.asset(
+ Assets.svg.backupAuto,
+ width: 48,
+ height: 48,
+ ),
+ isEnabledAutoBackup
+ ? SvgPicture.asset(
+ Assets.svg.enableButton,
+ )
+ : SvgPicture.asset(
+ Assets.svg.disableButton,
+ ),
+ ],
+ ),
),
Center(
child: Row(
@@ -338,7 +364,9 @@ class _BackupRestoreSettings extends ConsumerState {
desktopMed: true,
width: 190,
label: "Edit auto backup",
- onPressed: () {},
+ onPressed: () {
+ createAutoBackup();
+ },
),
],
)
@@ -362,11 +390,14 @@ class _BackupRestoreSettings extends ConsumerState {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- SvgPicture.asset(
- Assets.svg.backupAdd,
- width: 48,
- height: 48,
- alignment: Alignment.topLeft,
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: SvgPicture.asset(
+ Assets.svg.backupAdd,
+ width: 48,
+ height: 48,
+ alignment: Alignment.topLeft,
+ ),
),
Center(
child: Row(
@@ -441,11 +472,14 @@ class _BackupRestoreSettings extends ConsumerState {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- SvgPicture.asset(
- Assets.svg.backupRestore,
- width: 48,
- height: 48,
- alignment: Alignment.topLeft,
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: SvgPicture.asset(
+ Assets.svg.backupRestore,
+ width: 48,
+ height: 48,
+ alignment: Alignment.topLeft,
+ ),
),
Center(
child: Row(
diff --git a/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/create_auto_backup.dart b/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/create_auto_backup.dart
index e804071cc..acd0e689c 100644
--- a/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/create_auto_backup.dart
+++ b/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/create_auto_backup.dart
@@ -578,7 +578,9 @@ class _CreateAutoBackup extends ConsumerState {
label: "Cancel",
onPressed: () {
int count = 0;
- Navigator.of(context).popUntil((_) => count++ >= 2);
+ !isEnabledAutoBackup
+ ? Navigator.of(context).popUntil((_) => count++ >= 2)
+ : Navigator.of(context).pop();
},
),
),
diff --git a/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/restore_backup_dialog.dart b/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/restore_backup_dialog.dart
deleted file mode 100644
index 7f944847d..000000000
--- a/lib/pages_desktop_specific/home/settings_menu/backup_and_restore/restore_backup_dialog.dart
+++ /dev/null
@@ -1,171 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter_svg/svg.dart';
-import 'package:stackwallet/utilities/assets.dart';
-import 'package:stackwallet/utilities/text_styles.dart';
-import 'package:stackwallet/utilities/theme/stack_colors.dart';
-import 'package:stackwallet/widgets/desktop/desktop_dialog.dart';
-import 'package:stackwallet/widgets/desktop/desktop_dialog_close_button.dart';
-import 'package:stackwallet/widgets/desktop/secondary_button.dart';
-import 'package:stackwallet/widgets/rounded_white_container.dart';
-
-class RestoreBackupDialog extends StatelessWidget {
- const RestoreBackupDialog({Key? key}) : super(key: key);
-
- @override
- Widget build(BuildContext context) {
- return DesktopDialog(
- maxHeight: 750,
- maxWidth: 600,
- child: LayoutBuilder(
- builder: (context, constraints) {
- return SingleChildScrollView(
- child: ConstrainedBox(
- constraints: BoxConstraints(
- minHeight: constraints.maxHeight,
- ),
- child: IntrinsicHeight(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Padding(
- padding: const EdgeInsets.all(32),
- child: Text(
- "Restoring Stack Wallet",
- style: STextStyles.desktopH3(context),
- textAlign: TextAlign.center,
- ),
- ),
- const DesktopDialogCloseButton(),
- ],
- ),
- const SizedBox(
- height: 30,
- ),
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 32),
- child: Row(
- children: [
- Text(
- "Settings",
- style: STextStyles.desktopTextExtraSmall(context)
- .copyWith(
- color: Theme.of(context)
- .extension()!
- .textDark3,
- ),
- textAlign: TextAlign.left,
- ),
- ],
- ),
- ),
- Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 32, vertical: 12),
- child: RoundedWhiteContainer(
- borderColor: Theme.of(context)
- .extension()!
- .background,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Row(
- children: [
- SvgPicture.asset(
- Assets.svg.framedAddressBook,
- width: 40,
- height: 40,
- ),
- const SizedBox(width: 12),
- Text(
- "Address Book",
- style:
- STextStyles.desktopTextSmall(context),
- ),
- ],
- ),
-
- ///TODO: CHECKMARK ANIMATION
- ],
- ),
- ),
- ),
- Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 32, vertical: 12),
- child: RoundedWhiteContainer(
- borderColor: Theme.of(context)
- .extension()!
- .background,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Row(
- children: [
- SvgPicture.asset(
- Assets.svg.framedGear,
- width: 40,
- height: 40,
- ),
- const SizedBox(width: 12),
- Text(
- "Preferences",
- style:
- STextStyles.desktopTextSmall(context),
- ),
- ],
- ),
-
- ///TODO: CHECKMARK ANIMATION
- ],
- ),
- ),
- ),
- const SizedBox(
- height: 30,
- ),
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 32),
- child: Row(
- children: [
- Text(
- "Wallets",
- style: STextStyles.desktopTextExtraSmall(context)
- .copyWith(
- color: Theme.of(context)
- .extension()!
- .textDark3,
- ),
- textAlign: TextAlign.left,
- ),
- ],
- ),
- ),
- const Spacer(),
- Padding(
- padding: const EdgeInsets.all(32),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.end,
- children: [
- SecondaryButton(
- desktopMed: true,
- width: 200,
- label: "Cancel restore process",
- onPressed: () {
- Navigator.of(context).pop();
- },
- ),
- ],
- ),
- ),
- ],
- ),
- ),
- ),
- );
- },
- ));
- }
-}
diff --git a/lib/utilities/assets.dart b/lib/utilities/assets.dart
index b0c6b3bf9..f853a00d8 100644
--- a/lib/utilities/assets.dart
+++ b/lib/utilities/assets.dart
@@ -69,6 +69,7 @@ class _SVG {
String get circleLanguage => "assets/svg/language-circle.svg";
String get circleDollarSign => "assets/svg/dollar-sign-circle.svg";
String get circleLock => "assets/svg/lock-circle.svg";
+ String get enableButton => "assets/svg/enabled-button.svg";
String get disableButton => "assets/svg/Button.svg";
String get polygon => "assets/svg/Polygon.svg";
String get personaIncognito => "assets/svg/persona-incognito-1.svg";
diff --git a/lib/utilities/enums/coin_enum.dart b/lib/utilities/enums/coin_enum.dart
index 95294c8aa..48212bde8 100644
--- a/lib/utilities/enums/coin_enum.dart
+++ b/lib/utilities/enums/coin_enum.dart
@@ -132,7 +132,7 @@ extension CoinExt on Coin {
case Coin.litecoinTestNet:
return "litecoin";
case Coin.bitcoincashTestnet:
- return "bitcoincash";
+ return "bchtest";
case Coin.firoTestNet:
return "firo";
case Coin.dogecoinTestNet:
diff --git a/pubspec.yaml b/pubspec.yaml
index 19d38ca4f..8b03cd57e 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -298,6 +298,7 @@ flutter:
- assets/svg/persona-easy-1.svg
- assets/svg/persona-incognito-1.svg
- assets/svg/Button.svg
+ - assets/svg/enabled-button.svg
- assets/svg/lock-circle.svg
- assets/svg/dollar-sign-circle.svg
- assets/svg/language-circle.svg
diff --git a/test/services/coins/monero/monero_wallet_test.dart b/test/services/coins/monero/monero_wallet_test.dart
index 2c755b484..7bbc88ed9 100644
--- a/test/services/coins/monero/monero_wallet_test.dart
+++ b/test/services/coins/monero/monero_wallet_test.dart
@@ -1,43 +1,27 @@
-import 'dart:async';
import 'dart:core';
import 'dart:core' as core;
import 'dart:io';
import 'dart:math';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:hive/hive.dart';
-import 'package:hive_test/hive_test.dart';
-import 'package:mockito/annotations.dart';
-import 'package:mockito/mockito.dart';
-
-import 'package:cw_core/monero_amount_format.dart';
import 'package:cw_core/node.dart';
-import 'package:cw_core/pending_transaction.dart';
import 'package:cw_core/unspent_coins_info.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart';
-import 'package:cw_monero/api/wallet.dart';
-import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager;
-import 'package:cw_monero/pending_monero_transaction.dart';
import 'package:cw_monero/monero_wallet.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
import 'package:flutter_libmonero/core/key_service.dart';
import 'package:flutter_libmonero/core/wallet_creation_service.dart';
-import 'package:flutter_libmonero/view_model/send/output.dart';
import 'package:flutter_libmonero/monero/monero.dart';
-import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:flutter_test/flutter_test.dart';
import 'package:hive/hive.dart';
+import 'package:hive_test/hive_test.dart';
+import 'package:mockito/annotations.dart';
import 'package:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
-
import 'package:stackwallet/services/wallets.dart';
-
-import 'dart:developer' as developer;
+import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
// TODO trim down to the minimum imports above
@@ -76,12 +60,6 @@ void main() async {
dirPath: '');
late WalletCredentials credentials;
- WidgetsFlutterBinding.ensureInitialized();
- Directory appDir = (await getApplicationDocumentsDirectory());
- if (Platform.isIOS) {
- appDir = (await getLibraryDirectory());
- }
-
monero.onStartup();
bool hiveAdaptersRegistered = false;
@@ -101,7 +79,8 @@ void main() async {
await wallets.put('currentWalletName', name);
_walletInfoSource = await Hive.openBox(WalletInfo.boxName);
- walletService = monero.createMoneroWalletService(_walletInfoSource);
+ walletService = monero
+ .createMoneroWalletService(_walletInfoSource as Box);
}
try {
diff --git a/test/services/coins/wownero/wownero_wallet_test.dart b/test/services/coins/wownero/wownero_wallet_test.dart
index 87229a63a..c58654b4b 100644
--- a/test/services/coins/wownero/wownero_wallet_test.dart
+++ b/test/services/coins/wownero/wownero_wallet_test.dart
@@ -1,38 +1,26 @@
-import 'dart:async';
import 'dart:core';
import 'dart:core' as core;
import 'dart:io';
import 'dart:math';
-import 'package:flutter_test/flutter_test.dart';
-import 'package:hive/hive.dart';
-import 'package:hive_test/hive_test.dart';
-import 'package:mockito/annotations.dart';
-import 'package:mockito/mockito.dart';
-
-import 'package:cw_core/monero_amount_format.dart';
import 'package:cw_core/node.dart';
-import 'package:cw_core/pending_transaction.dart';
import 'package:cw_core/unspent_coins_info.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart';
-import 'package:cw_wownero/api/wallet.dart';
-import 'package:cw_wownero/pending_wownero_transaction.dart';
import 'package:cw_wownero/wownero_wallet.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
import 'package:flutter_libmonero/core/key_service.dart';
import 'package:flutter_libmonero/core/wallet_creation_service.dart';
-import 'package:flutter_libmonero/view_model/send/output.dart';
import 'package:flutter_libmonero/wownero/wownero.dart';
-import 'package:flutter_secure_storage/flutter_secure_storage.dart';
-import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
+import 'package:flutter_test/flutter_test.dart';
import 'package:hive/hive.dart';
+import 'package:hive_test/hive_test.dart';
+import 'package:mockito/annotations.dart';
import 'package:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
+import 'package:stackwallet/utilities/flutter_secure_storage_interface.dart';
import 'wownero_wallet_test_data.dart';
@@ -67,12 +55,6 @@ void main() async {
dirPath: '');
late WalletCredentials credentials;
- WidgetsFlutterBinding.ensureInitialized();
- Directory appDir = (await getApplicationDocumentsDirectory());
- if (Platform.isIOS) {
- appDir = (await getLibraryDirectory());
- }
-
wownero.onStartup();
bool hiveAdaptersRegistered = false;
@@ -92,7 +74,8 @@ void main() async {
await wallets.put('currentWalletName', name);
_walletInfoSource = await Hive.openBox(WalletInfo.boxName);
- walletService = wownero.createWowneroWalletService(_walletInfoSource);
+ walletService = wownero
+ .createWowneroWalletService(_walletInfoSource as Box);
}
bool hasThrown = false;