diff --git a/lib/pages/settings_views/global_settings_view/advanced_views/advanced_settings_view.dart b/lib/pages/settings_views/global_settings_view/advanced_views/advanced_settings_view.dart index db52f39a9..9285e2f08 100644 --- a/lib/pages/settings_views/global_settings_view/advanced_views/advanced_settings_view.dart +++ b/lib/pages/settings_views/global_settings_view/advanced_views/advanced_settings_view.dart @@ -1,20 +1,19 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:stackwallet/widgets/choose_coin_view.dart'; import 'package:stackwallet/pages/settings_views/global_settings_view/advanced_views/debug_view.dart'; +import 'package:stackwallet/pages/settings_views/global_settings_view/advanced_views/manage_explorer_view.dart'; import 'package:stackwallet/pages/stack_privacy_calls.dart'; import 'package:stackwallet/providers/global/prefs_provider.dart'; import 'package:stackwallet/utilities/constants.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/widgets/background.dart'; +import 'package:stackwallet/widgets/choose_coin_view.dart'; import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart'; import 'package:stackwallet/widgets/custom_buttons/draggable_switch_button.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart'; import 'package:tuple/tuple.dart'; -import 'manage_explorer_view.dart'; - class AdvancedSettingsView extends StatelessWidget { const AdvancedSettingsView({ Key? key, @@ -240,7 +239,10 @@ class AdvancedSettingsView extends StatelessWidget { ), onPressed: () { Navigator.of(context).pushNamed(ChooseCoinView.routeName, - arguments: const Tuple3("Manage block explorers", "block explorer", ManageExplorerView.routeName)); + arguments: const Tuple3( + "Manage block explorers", + "block explorer", + ManageExplorerView.routeName)); }, child: Padding( padding: const EdgeInsets.symmetric( diff --git a/lib/pages/settings_views/global_settings_view/advanced_views/manage_explorer_view.dart b/lib/pages/settings_views/global_settings_view/advanced_views/manage_explorer_view.dart index dc84fe8c8..6cf02b148 100644 --- a/lib/pages/settings_views/global_settings_view/advanced_views/manage_explorer_view.dart +++ b/lib/pages/settings_views/global_settings_view/advanced_views/manage_explorer_view.dart @@ -1,13 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:stackwallet/utilities/block_explorers.dart'; +import 'package:stackwallet/utilities/enums/coin_enum.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/widgets/background.dart'; import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart'; -import 'package:stackwallet/utilities/enums/coin_enum.dart'; - -import '../../../../widgets/rounded_white_container.dart'; +import 'package:stackwallet/widgets/rounded_white_container.dart'; class ManageExplorerView extends ConsumerStatefulWidget { const ManageExplorerView({ @@ -24,85 +23,95 @@ class ManageExplorerView extends ConsumerStatefulWidget { } class _ManageExplorerViewState extends ConsumerState { - - late TextEditingController textEditingController; - @override void initState() { super.initState(); - textEditingController = TextEditingController(text: getBlockExplorerTransactionUrlFor(coin: widget.coin, txid: "[TXID]").toString().replaceAll("%5BTXID%5D", "[TXID]")); + textEditingController = TextEditingController( + text: + getBlockExplorerTransactionUrlFor(coin: widget.coin, txid: "[TXID]") + .toString() + .replaceAll("%5BTXID%5D", "[TXID]")); } @override - Widget build(BuildContext context) { - return Background( - child: Scaffold( - backgroundColor: Theme.of(context).extension()! - .background, - appBar: AppBar( - leading: AppBarBackButton( - onPressed: () { - Navigator.of(context).pop(); - }, - ), - title: Text( - "${widget.coin.prettyName} block explorer", - style: STextStyles.navBarTitle(context), - ), - ), - body: Padding( - padding: const EdgeInsets.all(16), - child: Column( - children: [ - Expanded(child: Column( - children: [ - TextField( - controller: textEditingController, - decoration: const InputDecoration( - border: OutlineInputBorder(), + Widget build(BuildContext context) { + return Background( + child: Scaffold( + backgroundColor: Theme.of(context).extension()!.background, + appBar: AppBar( + leading: AppBarBackButton( + onPressed: () { + Navigator.of(context).pop(); + }, + ), + title: Text( + "${widget.coin.prettyName} block explorer", + style: STextStyles.navBarTitle(context), + ), + ), + body: Padding( + padding: const EdgeInsets.all(16), + child: Column( + children: [ + Expanded( + child: Column( + children: [ + TextField( + controller: textEditingController, + decoration: const InputDecoration( + border: OutlineInputBorder(), + ), + ), + const SizedBox( + height: 8, + ), + RoundedWhiteContainer( + child: Center( + child: Text( + "Edit your block explorer above. Keep in mind that " + "every block explorer has a slightly different URL " + "scheme.\n\nPaste in your block explorer of choice," + " then edit in [TXID] where the transaction ID " + "should go, and Stack Wallet will auto fill the " + "transaction ID in that place of URL.", + style: STextStyles.itemSubtitle(context), ), ), - const SizedBox(height: 8,), - RoundedWhiteContainer( - child: Center( - child: Text( - "Edit your block explorer above. Keep in mind that every block explorer has a slightly different URL scheme.\n\n" - "Paste in your block explorer of choice, then edit in [TXID] where the transaction ID should go, and Stack Wallet will auto fill the transaction ID in that place of URL.", - style: STextStyles.itemSubtitle(context), - ), - ), - ), - ], - )), - Align( - alignment: Alignment.bottomCenter, - child: ConstrainedBox(constraints: const BoxConstraints( + ), + ], + )), + Align( + alignment: Alignment.bottomCenter, + child: ConstrainedBox( + constraints: const BoxConstraints( minWidth: 480, minHeight: 70, ), - child: TextButton( - style: Theme.of(context) - .extension()! - .getPrimaryEnabledButtonStyle(context), - onPressed: () { - textEditingController.text = textEditingController.text.trim(); - setBlockExplorerForCoin(coin: widget.coin, url: Uri.parse(textEditingController.text)).then((value) => - Navigator.of(context).pop() - ); - }, - child: Text( - "Save", - style: STextStyles.button(context), - ), + child: TextButton( + style: Theme.of(context) + .extension()! + .getPrimaryEnabledButtonStyle(context), + onPressed: () { + textEditingController.text = + textEditingController.text.trim(); + setBlockExplorerForCoin( + coin: widget.coin, + url: Uri.parse(textEditingController.text)) + .then((value) => Navigator.of(context).pop()); + }, + child: Text( + "Save", + style: STextStyles.button(context), ), ), - ) - ], + ), + ) + ], ), ), ), - ); - } -} \ No newline at end of file + ); + } +} diff --git a/lib/utilities/block_explorers.dart b/lib/utilities/block_explorers.dart index ebfee9db0..a5619587e 100644 --- a/lib/utilities/block_explorers.dart +++ b/lib/utilities/block_explorers.dart @@ -1,11 +1,7 @@ -import 'dart:ffi'; - +import 'package:stackwallet/db/isar/main_db.dart'; +import 'package:stackwallet/models/isar/models/block_explorer.dart'; import 'package:stackwallet/utilities/enums/coin_enum.dart'; -import '../db/hive/db.dart'; -import '../db/isar/main_db.dart'; -import '../models/isar/models/block_explorer.dart'; - Uri getDefaultBlockExplorerUrlFor({ required Coin coin, required String txid, @@ -24,7 +20,7 @@ Uri getDefaultBlockExplorerUrlFor({ case Coin.dogecoinTestNet: return Uri.parse("https://chain.so/tx/DOGETEST/$txid"); case Coin.epicCash: - // TODO: Handle this case. + // TODO: Handle this case. throw UnimplementedError("missing block explorer for epic cash"); case Coin.ethereum: return Uri.parse("https://etherscan.io/tx/$txid"); @@ -48,22 +44,28 @@ Uri getDefaultBlockExplorerUrlFor({ } } -Future setBlockExplorerForCoin( - {required Coin coin, required Uri url} - ) async { - await MainDB.instance.putTransactionBlockExplorer(TransactionBlockExplorer(ticker: coin.ticker, url: url.toString())); - return 0; +/// returns internal Isar ID for the inserted object/record +Future setBlockExplorerForCoin({ + required Coin coin, + required Uri url, +}) async { + return await MainDB.instance.putTransactionBlockExplorer( + TransactionBlockExplorer( + ticker: coin.ticker, + url: url.toString(), + ), + ); } Uri getBlockExplorerTransactionUrlFor({ required Coin coin, required String txid, }) { - var url = MainDB.instance.getTransactionBlockExplorer(coin: coin)?.url.toString(); + String? url = MainDB.instance.getTransactionBlockExplorer(coin: coin)?.url; if (url == null) { return getDefaultBlockExplorerUrlFor(coin: coin, txid: txid); } else { - url = url.replaceAll("%5BTXID%5D", txid); + url = url.replaceAll("%5BTXID%5D", txid); return Uri.parse(url); } } diff --git a/lib/utilities/prefs.dart b/lib/utilities/prefs.dart index ea4720b17..973541366 100644 --- a/lib/utilities/prefs.dart +++ b/lib/utilities/prefs.dart @@ -7,8 +7,6 @@ import 'package:stackwallet/utilities/enums/sync_type_enum.dart'; import 'package:stackwallet/utilities/theme/color_theme.dart'; import 'package:uuid/uuid.dart'; -import 'enums/coin_enum.dart'; - class Prefs extends ChangeNotifier { Prefs._(); static final Prefs _instance = Prefs._(); diff --git a/lib/widgets/choose_coin_view.dart b/lib/widgets/choose_coin_view.dart index b2e314f7c..baced09fe 100644 --- a/lib/widgets/choose_coin_view.dart +++ b/lib/widgets/choose_coin_view.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:stackwallet/pages/settings_views/global_settings_view/manage_nodes_views/coin_nodes_view.dart'; import 'package:stackwallet/providers/providers.dart'; import 'package:stackwallet/utilities/assets.dart'; import 'package:stackwallet/utilities/constants.dart'; @@ -65,7 +64,7 @@ class _ChooseCoinViewState extends ConsumerState { }, ), title: Text( - widget.title ?? "Choose Coin", + widget.title, style: STextStyles.navBarTitle(context), ), ), @@ -80,12 +79,7 @@ class _ChooseCoinViewState extends ConsumerState { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ ...coins.map( - (coin) { - final count = ref - .watch(nodeServiceChangeNotifierProvider - .select((value) => value.getNodesFor(coin))) - .length; - + (coin) { return Padding( padding: const EdgeInsets.all(4), child: RoundedWhiteContainer( @@ -98,7 +92,7 @@ class _ChooseCoinViewState extends ConsumerState { ), ), materialTapTargetSize: - MaterialTapTargetSize.shrinkWrap, + MaterialTapTargetSize.shrinkWrap, onPressed: () { Navigator.of(context).pushNamed( widget.nextRouteName, @@ -121,7 +115,7 @@ class _ChooseCoinViewState extends ConsumerState { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "${coin.prettyName} ${widget.coinAdditional ?? ""}", + "${coin.prettyName} ${widget.coinAdditional}", style: STextStyles.titleBold12(context), ), ], @@ -141,4 +135,4 @@ class _ChooseCoinViewState extends ConsumerState { ), ); } -} \ No newline at end of file +}