diff --git a/lib/models/exchange/exchange_form_state.dart b/lib/models/exchange/exchange_form_state.dart index 2e237dd1c..62509f7bb 100644 --- a/lib/models/exchange/exchange_form_state.dart +++ b/lib/models/exchange/exchange_form_state.dart @@ -276,6 +276,12 @@ class ExchangeFormState extends ChangeNotifier { void _onExchangeRateTypeChanged() { print("_onExchangeRateTypeChanged"); + updateRanges(shouldNotifyListeners: true).then( + (_) => updateEstimate( + shouldNotifyListeners: true, + reversed: reversed, + ), + ); } void _onExchangeTypeChanged() { diff --git a/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart b/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart index 0edc110be..76e74fa14 100644 --- a/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart +++ b/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/restore_options_view.dart @@ -144,6 +144,8 @@ class _RestoreOptionsViewState extends ConsumerState<RestoreOptionsView> { Future<void> chooseDate() async { final height = MediaQuery.of(context).size.height; + final fetchedColor = + Theme.of(context).extension<StackColors>()!.accentColorDark; // check and hide keyboard if (FocusScope.of(context).hasFocus) { FocusScope.of(context).unfocus(); @@ -155,8 +157,7 @@ class _RestoreOptionsViewState extends ConsumerState<RestoreOptionsView> { initialDate: DateTime.now(), height: height * 0.5, theme: ThemeData( - primarySwatch: Util.createMaterialColor( - Theme.of(context).extension<StackColors>()!.accentColorDark), + primarySwatch: Util.createMaterialColor(fetchedColor), ), //TODO pick a better initial date // 2007 chosen as that is just before bitcoin launched @@ -272,6 +273,7 @@ class _RestoreOptionsViewState extends ConsumerState<RestoreOptionsView> { // if (!isDesktop) RestoreFromDatePicker( onTap: chooseDate, + controller: _dateController, ), // if (isDesktop) diff --git a/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/sub_widgets/restore_from_date_picker.dart b/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/sub_widgets/restore_from_date_picker.dart index 8a24e95bb..e5637cfc6 100644 --- a/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/sub_widgets/restore_from_date_picker.dart +++ b/lib/pages/add_wallet_views/restore_wallet_view/restore_options_view/sub_widgets/restore_from_date_picker.dart @@ -5,10 +5,14 @@ import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; class RestoreFromDatePicker extends StatefulWidget { - const RestoreFromDatePicker({Key? key, required this.onTap}) - : super(key: key); + const RestoreFromDatePicker({ + Key? key, + required this.onTap, + required this.controller, + }) : super(key: key); final VoidCallback onTap; + final TextEditingController controller; @override State<RestoreFromDatePicker> createState() => _RestoreFromDatePickerState(); @@ -21,17 +25,11 @@ class _RestoreFromDatePickerState extends State<RestoreFromDatePicker> { @override void initState() { onTap = widget.onTap; - _dateController = TextEditingController(); + _dateController = widget.controller; super.initState(); } - @override - void dispose() { - _dateController.dispose(); - super.dispose(); - } - @override Widget build(BuildContext context) { return Container( diff --git a/lib/services/node_service.dart b/lib/services/node_service.dart index 06c8c40ea..5b9fe5063 100644 --- a/lib/services/node_service.dart +++ b/lib/services/node_service.dart @@ -39,6 +39,19 @@ class NodeService extends ChangeNotifier { key: savedNode.id, value: defaultNode.copyWith(enabled: savedNode.enabled)); } + + // check if a default node is the primary node for the crypto currency + // and update it if needed + final coin = coinFromPrettyName(defaultNode.coinName); + final primaryNode = getPrimaryNodeFor(coin: coin); + if (primaryNode != null && primaryNode.id == defaultNode.id) { + await setPrimaryNodeFor( + coin: coin, + node: defaultNode.copyWith( + enabled: primaryNode.enabled, + ), + ); + } } } diff --git a/lib/utilities/default_nodes.dart b/lib/utilities/default_nodes.dart index b09787d33..566b829ce 100644 --- a/lib/utilities/default_nodes.dart +++ b/lib/utilities/default_nodes.dart @@ -70,28 +70,24 @@ abstract class DefaultNodes { isDown: false, ); - // TODO: eventually enable ssl and set scheme to https - // currently get certificate failure static NodeModel get monero => NodeModel( - host: "http://monero.stackwallet.com", + host: "https://monero.stackwallet.com", port: 18081, name: defaultName, id: _nodeId(Coin.monero), - useSSL: false, + useSSL: true, enabled: true, coinName: Coin.monero.name, isFailover: true, isDown: false, ); - // TODO: eventually enable ssl and set scheme to https - // currently get certificate failure static NodeModel get wownero => NodeModel( - host: "http://eu-west-2.wow.xmr.pm", + host: "https://wownero.stackwallet.com", port: 34568, name: defaultName, id: _nodeId(Coin.wownero), - useSSL: false, + useSSL: true, enabled: true, coinName: Coin.wownero.name, isFailover: true, diff --git a/lib/utilities/enums/coin_enum.dart b/lib/utilities/enums/coin_enum.dart index 78a04e220..c25a5ca4e 100644 --- a/lib/utilities/enums/coin_enum.dart +++ b/lib/utilities/enums/coin_enum.dart @@ -181,25 +181,32 @@ Coin coinFromPrettyName(String name) { case "Bitcoin": case "bitcoin": return Coin.bitcoin; + case "Bitcoincash": case "bitcoincash": case "Bitcoin Cash": return Coin.bitcoincash; + case "Dogecoin": case "dogecoin": return Coin.dogecoin; + case "Epic Cash": case "epicCash": return Coin.epicCash; + case "Firo": case "firo": return Coin.firo; + case "Monero": case "monero": return Coin.monero; + case "Namecoin": case "namecoin": return Coin.namecoin; + case "Bitcoin Testnet": case "tBitcoin": case "bitcoinTestNet": @@ -208,19 +215,24 @@ Coin coinFromPrettyName(String name) { case "Bitcoincash Testnet": case "tBitcoin Cash": case "Bitcoin Cash Testnet": + case "bitcoincashTestnet": return Coin.bitcoincashTestnet; + case "Firo Testnet": case "tFiro": case "firoTestNet": return Coin.firoTestNet; + case "Dogecoin Testnet": case "tDogecoin": case "dogecoinTestNet": return Coin.dogecoinTestNet; + case "Wownero": case "tWownero": case "wownero": return Coin.wownero; + default: throw ArgumentError.value( name, "name", "No Coin enum value with that prettyName"); diff --git a/lib/widgets/node_options_sheet.dart b/lib/widgets/node_options_sheet.dart index 58a5bf30a..effe97097 100644 --- a/lib/widgets/node_options_sheet.dart +++ b/lib/widgets/node_options_sheet.dart @@ -306,10 +306,10 @@ class NodeOptionsSheet extends ConsumerWidget { style: status == "Connected" ? Theme.of(context) .extension<StackColors>()! - .getPrimaryEnabledButtonColor(context) + .getPrimaryDisabledButtonColor(context) : Theme.of(context) .extension<StackColors>()! - .getPrimaryDisabledButtonColor(context), + .getPrimaryEnabledButtonColor(context), onPressed: status == "Connected" ? null : () async {