Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a67f6f9
infinite changenow loading fix
julian-CStack Sep 9, 2022
bc66948
tapping android back when in main exchange view takes you to wallets …
julian-CStack Sep 9, 2022
c18d456
fix bug where wallet coin wouldn't be shown in exchange if changenow …
julian-CStack Sep 9, 2022
95d86d8
don't check balance on exchange from wallet
julian-CStack Sep 9, 2022
4eccef7
Merge branch 'staging' into ui-testing
julian-CStack Sep 9, 2022
d8bc213
between 2-4x speed increase for restore, first refresh, and nth refresh
Sep 9, 2022
9229aa4
add load into selected wallet immediately on startup setting
julian-CStack Sep 9, 2022
8556748
Merge remote-tracking branch 'origin/speedup' into ui-testing
julian-CStack Sep 9, 2022
4ad5bd6
linter warning clean up
julian-CStack Sep 9, 2022
4df68dc
build runner updated mocks
julian-CStack Sep 9, 2022
a7b9339
Merge branch 'main' into speedup
Sep 10, 2022
fa39ef6
Merge branch 'ui-testing' into speedup
Sep 10, 2022
2e604ad
updated failing btc tests from speedup
julian-CStack Sep 10, 2022
166f02c
Merge branch 'ui-testing' into speedup
Sep 12, 2022
a0d44b1
show build commits for native code
Sep 12, 2022
cdbce96
faster epic address loading
julian-CStack Sep 12, 2022
14bf4de
Merge branch 'main' into speedup
msalazarm Sep 12, 2022
ffeb94a
Merge pull request #56 from cypherstack/speedup
msalazarm Sep 12, 2022
ea17eb5
updated firo tests to reflect speedup modifications
julian-CStack Sep 12, 2022
b1b8862
change build
Sep 12, 2022
4ebda4a
updated doge tests to reflect speedup modifications
julian-CStack Sep 12, 2022
e5ad8fe
Merge branch 'staging' into ui-testing
julian-CStack Sep 12, 2022
84cc37a
Merge pull request #57 from cypherstack/ui-testing
julian-CStack Sep 12, 2022
7eed833
Merge branch 'staging' into rylee-tmp
Sep 12, 2022
0b0f26b
change build
Sep 12, 2022
7ad6077
Merge pull request #58 from cypherstack/rylee-tmp
ryleedavis Sep 12, 2022
57ccfff
clear out null verified wallets on startup
julian-CStack Sep 12, 2022
d009088
Merge pull request #59 from cypherstack/ui-testing
ryleedavis Sep 12, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -589,9 +589,16 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
_loadChangeNowData();
}

return const LockscreenView(
String? startupWalletId;
if (ref.read(prefsChangeNotifierProvider).gotoWalletOnStartup) {
startupWalletId =
ref.read(prefsChangeNotifierProvider).startupWalletId;
}

return LockscreenView(
isInitialAppLogin: true,
routeOnSuccess: HomeView.routeName,
routeOnSuccessArguments: startupWalletId,
biometricsAuthenticationTitle: "Unlock Stack",
biometricsLocalizedReason:
"Unlock your stack wallet using biometrics",
Expand Down
126 changes: 12 additions & 114 deletions lib/pages/exchange_view/exchange_loading_overlay.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:stackwallet/providers/exchange/available_currencies_state_provider.dart';
import 'package:stackwallet/providers/exchange/available_floating_rate_pairs_state_provider.dart';
import 'package:stackwallet/providers/exchange/change_now_provider.dart';
import 'package:stackwallet/providers/exchange/changenow_initial_load_status.dart';
import 'package:stackwallet/providers/exchange/estimate_rate_exchange_form_provider.dart';
import 'package:stackwallet/providers/exchange/fixed_rate_exchange_form_provider.dart';
import 'package:stackwallet/providers/exchange/fixed_rate_market_pairs_provider.dart';
import 'package:stackwallet/utilities/cfcolors.dart';
import 'package:stackwallet/utilities/logger.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/widgets/custom_loading_overlay.dart';
import 'package:stackwallet/widgets/stack_dialog.dart';

class ExchangeLoadingOverlayView extends ConsumerStatefulWidget {
const ExchangeLoadingOverlayView({Key? key}) : super(key: key);
const ExchangeLoadingOverlayView({
Key? key,
required this.unawaitedLoad,
}) : super(key: key);

final VoidCallback unawaitedLoad;

@override
ConsumerState<ExchangeLoadingOverlayView> createState() =>
Expand All @@ -28,103 +26,6 @@ class _ExchangeLoadingOverlayViewState

bool userReloaded = false;

Future<void> _loadFixedRateMarkets() async {
if (ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state ==
ChangeNowLoadStatus.loading) {
// already in progress so just
return;
}

ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.loading;

final response3 =
await ref.read(changeNowProvider).getAvailableFixedRateMarkets();
if (response3.value != null) {
ref.read(fixedRateMarketPairsStateProvider.state).state =
response3.value!;

if (ref.read(fixedRateExchangeFormProvider).market == null) {
final matchingMarkets =
response3.value!.where((e) => e.to == "doge" && e.from == "btc");
if (matchingMarkets.isNotEmpty) {
await ref
.read(fixedRateExchangeFormProvider)
.updateMarket(matchingMarkets.first, true);
}
}
} else {
Logging.instance.log(
"Failed to load changeNOW fixed rate markets: ${response3.exception?.errorMessage}",
level: LogLevel.Error);

ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.failed;
return;
}

ref.read(changeNowFixedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.success;
}

Future<void> _loadChangeNowStandardCurrencies() async {
if (ref
.read(changeNowEstimatedInitialLoadStatusStateProvider.state)
.state ==
ChangeNowLoadStatus.loading) {
// already in progress so just
return;
}

ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.loading;

final response = await ref.read(changeNowProvider).getAvailableCurrencies();
final response2 =
await ref.read(changeNowProvider).getAvailableFloatingRatePairs();
if (response.value != null) {
ref.read(availableChangeNowCurrenciesStateProvider.state).state =
response.value!;
if (response2.value != null) {
ref.read(availableFloatingRatePairsStateProvider.state).state =
response2.value!;

if (response.value!.length > 1) {
if (ref.read(estimatedRateExchangeFormProvider).from == null) {
if (response.value!.where((e) => e.ticker == "btc").isNotEmpty) {
await ref.read(estimatedRateExchangeFormProvider).updateFrom(
response.value!.firstWhere((e) => e.ticker == "btc"), false);
}
}
if (ref.read(estimatedRateExchangeFormProvider).to == null) {
if (response.value!.where((e) => e.ticker == "doge").isNotEmpty) {
await ref.read(estimatedRateExchangeFormProvider).updateTo(
response.value!.firstWhere((e) => e.ticker == "doge"), false);
}
}
}
} else {
Logging.instance.log(
"Failed to load changeNOW available floating rate pairs: ${response2.exception?.errorMessage}",
level: LogLevel.Error);
ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.failed;
return;
}
} else {
Logging.instance.log(
"Failed to load changeNOW currencies: ${response.exception?.errorMessage}",
level: LogLevel.Error);
await Future<void>.delayed(const Duration(seconds: 3));
ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.failed;
return;
}

ref.read(changeNowEstimatedInitialLoadStatusStateProvider.state).state =
ChangeNowLoadStatus.success;
}

@override
void initState() {
_statusEst =
Expand Down Expand Up @@ -168,8 +69,10 @@ class _ExchangeLoadingOverlayViewState
child: const CustomLoadingOverlay(
message: "Loading ChangeNOW data", eventBus: null),
),
if (_statusEst == ChangeNowLoadStatus.failed ||
_statusFixed == ChangeNowLoadStatus.failed)
if ((_statusEst == ChangeNowLoadStatus.failed ||
_statusFixed == ChangeNowLoadStatus.failed) &&
_statusEst != ChangeNowLoadStatus.loading &&
_statusFixed != ChangeNowLoadStatus.loading)
Container(
color: CFColors.stackAccent.withOpacity(0.7),
child: Column(
Expand All @@ -186,13 +89,8 @@ class _ExchangeLoadingOverlayViewState
.copyWith(color: CFColors.stackAccent),
),
onPressed: () {
if (_statusEst == ChangeNowLoadStatus.failed) {
_loadChangeNowStandardCurrencies();
}
if (_statusFixed == ChangeNowLoadStatus.failed) {
userReloaded = true;
_loadFixedRateMarkets();
}
userReloaded = true;
widget.unawaitedLoad();
},
),
),
Expand Down
99 changes: 49 additions & 50 deletions lib/pages/exchange_view/wallet_initiated_exchange_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/cfcolors.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
import 'package:stackwallet/utilities/enums/flush_bar_type.dart';
import 'package:stackwallet/utilities/format.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
import 'package:stackwallet/widgets/custom_loading_overlay.dart';
Expand Down Expand Up @@ -1272,55 +1271,55 @@ class _WalletInitiatedExchangeViewState
.read(estimatedRateExchangeFormProvider)
.fromAmountString);

if (ft.toLowerCase() ==
coin.ticker.toLowerCase()) {
bool shouldPop = false;
bool wasPopped = false;
unawaited(showDialog<void>(
context: context,
builder: (_) => WillPopScope(
onWillPop: () async {
if (shouldPop) {
wasPopped = true;
}
return shouldPop;
},
child: const CustomLoadingOverlay(
message: "Checking available balance",
eventBus: null,
),
),
));

final availableBalance =
await manager.availableBalance;

final feeObject = await manager.fees;

final fee = await manager.estimateFeeFor(
Format.decimalAmountToSatoshis(
sendAmount),
feeObject.medium);

shouldPop = true;
if (!wasPopped && mounted) {
Navigator.of(context).pop();
}

if (availableBalance <
sendAmount +
Format.satoshisToAmount(fee)) {
unawaited(showDialog<void>(
context: context,
builder: (_) => StackOkDialog(
title: "Insufficient balance",
message:
"Current ${coin.prettyName} wallet does not have enough ${coin.ticker} for this trade",
),
));
return;
}
}
// if (ft.toLowerCase() ==
// coin.ticker.toLowerCase()) {
// bool shouldPop = false;
// bool wasPopped = false;
// unawaited(showDialog<void>(
// context: context,
// builder: (_) => WillPopScope(
// onWillPop: () async {
// if (shouldPop) {
// wasPopped = true;
// }
// return shouldPop;
// },
// child: const CustomLoadingOverlay(
// message: "Checking available balance",
// eventBus: null,
// ),
// ),
// ));
//
// final availableBalance =
// await manager.availableBalance;
//
// final feeObject = await manager.fees;
//
// final fee = await manager.estimateFeeFor(
// Format.decimalAmountToSatoshis(
// sendAmount),
// feeObject.medium);
//
// shouldPop = true;
// if (!wasPopped && mounted) {
// Navigator.of(context).pop();
// }
//
// if (availableBalance <
// sendAmount +
// Format.satoshisToAmount(fee)) {
// unawaited(showDialog<void>(
// context: context,
// builder: (_) => StackOkDialog(
// title: "Insufficient balance",
// message:
// "Current ${coin.prettyName} wallet does not have enough ${coin.ticker} for this trade",
// ),
// ));
// return;
// }
// }

if (isEstimated) {
final fromTicker = ref
Expand Down
23 changes: 20 additions & 3 deletions lib/pages/home_view/home_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:stackwallet/pages/wallets_view/wallets_view.dart';
import 'package:stackwallet/providers/global/notifications_provider.dart';
import 'package:stackwallet/providers/ui/home_view_index_provider.dart';
import 'package:stackwallet/providers/ui/unread_notifications_provider.dart';
import 'package:stackwallet/services/change_now/change_now_loading_service.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/cfcolors.dart';
import 'package:stackwallet/utilities/constants.dart';
Expand Down Expand Up @@ -40,7 +41,16 @@ class _HomeViewState extends ConsumerState<HomeView> {

bool _exitEnabled = false;

final _cnLoadingService = ChangeNowLoadingService();

Future<bool> _onWillPop() async {

// go to home view when tapping back on the main exchange view
if (ref.read(homeViewPageIndexStateProvider.state).state == 1) {
ref.read(homeViewPageIndexStateProvider.state).state = 0;
return false;
}

if (_exitEnabled) {
return true;
}
Expand Down Expand Up @@ -70,16 +80,23 @@ class _HomeViewState extends ConsumerState<HomeView> {
return _exitEnabled;
}

void _loadCNData() {
// unawaited future
_cnLoadingService.loadAll(ref);
}

@override
void initState() {
_pageController = PageController();
_children = [
const WalletsView(),
if (Constants.enableExchange)
Stack(
children: const [
ExchangeView(),
ExchangeLoadingOverlayView(),
children: [
const ExchangeView(),
ExchangeLoadingOverlayView(
unawaitedLoad: _loadCNData,
),
],
),
// const BuyView(),
Expand Down
Loading