epic http address support in ui and some async lint fixes

This commit is contained in:
julian 2022-09-01 08:48:52 -06:00
parent 992797d907
commit ffef1011c1
3 changed files with 54 additions and 12 deletions

View file

@ -1,12 +1,17 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:stackwallet/notifications/show_flush_bar.dart';
import 'package:stackwallet/pages/pinpad_views/lock_screen_view.dart';
import 'package:stackwallet/pages/send_view/sub_widgets/sending_transaction_dialog.dart';
import 'package:stackwallet/pages/wallet_view/wallet_view.dart';
import 'package:stackwallet/providers/providers.dart';
import 'package:stackwallet/route_generator.dart';
import 'package:stackwallet/services/coins/epiccash/epiccash_wallet.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';
@ -40,14 +45,14 @@ class _ConfirmTransactionViewState
late final String routeOnSuccessName;
Future<void> _attemptSend(BuildContext context) async {
showDialog<dynamic>(
unawaited(showDialog<dynamic>(
context: context,
useSafeArea: false,
barrierDismissible: false,
builder: (context) {
return const SendingTransactionDialog();
},
);
));
final note = transactionInfo["note"] as String? ?? "";
final manager =
@ -55,10 +60,10 @@ class _ConfirmTransactionViewState
try {
final txid = await manager.confirmSend(txData: transactionInfo);
manager.refresh();
unawaited(manager.refresh());
// save note
ref
await ref
.read(notesServiceChangeNotifierProvider(walletId))
.editOrAddNote(txid: txid, note: note);
@ -66,12 +71,26 @@ class _ConfirmTransactionViewState
if (mounted) {
Navigator.of(context).popUntil(ModalRoute.withName(routeOnSuccessName));
}
} on BadEpicHttpAddressException catch (_) {
if (mounted) {
// pop building dialog
Navigator.of(context).pop();
unawaited(
showFloatingFlushBar(
type: FlushBarType.warning,
message:
"Connection failed. Please check the address and try again.",
context: context,
),
);
return;
}
} catch (e, s) {
debugPrint("$e\n$s");
// pop sending dialog
Navigator.of(context).pop();
showDialog<void>(
await showDialog<void>(
context: context,
useSafeArea: false,
barrierDismissible: true,
@ -316,7 +335,7 @@ class _ConfirmTransactionViewState
);
if (unlocked is bool && unlocked && mounted) {
_attemptSend(context);
unawaited(_attemptSend(context));
}
},
child: Text(

View file

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:decimal/decimal.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -1175,7 +1177,7 @@ class _SendViewState extends ConsumerState<SendView> {
try {
bool wasCancelled = false;
showDialog<dynamic>(
unawaited(showDialog<dynamic>(
context: context,
useSafeArea: false,
barrierDismissible: false,
@ -1188,7 +1190,7 @@ class _SendViewState extends ConsumerState<SendView> {
},
);
},
);
));
final txData = await manager.prepareSend(
address: _address!,
@ -1205,7 +1207,7 @@ class _SendViewState extends ConsumerState<SendView> {
txData["note"] = noteController.text;
txData["address"] = _address;
Navigator.of(context).push(
unawaited(Navigator.of(context).push(
RouteGenerator.getRoute(
shouldUseMaterialRoute: RouteGenerator
.useMaterialPageRoute,
@ -1219,14 +1221,14 @@ class _SendViewState extends ConsumerState<SendView> {
.routeName,
),
),
);
));
}
} catch (e) {
if (mounted) {
// pop building dialog
Navigator.of(context).pop();
showDialog<dynamic>(
unawaited(showDialog<dynamic>(
context: context,
useSafeArea: false,
barrierDismissible: true,
@ -1258,7 +1260,7 @@ class _SendViewState extends ConsumerState<SendView> {
),
);
},
);
));
}
}
}

View file

@ -39,6 +39,17 @@ const int MINIMUM_CONFIRMATIONS = 10;
const String GENESIS_HASH_MAINNET = "";
const String GENESIS_HASH_TESTNET = "";
class BadEpicHttpAddressException implements Exception {
final String? message;
BadEpicHttpAddressException({this.message});
@override
String toString() {
return "BadEpicHttpAddressException: $message";
}
}
// isolate
Map<ReceivePort, Isolate> isolates = {};
@ -754,6 +765,10 @@ class EpicCashWallet extends CoinServiceAPI {
}, name: walletName);
message = await receivePort.first;
// TODO: throw BadEpicHttpAddressException in the case where a send fails due to bad http address
// throw BadEpicHttpAddressException();
if (message is String) {
Logging.instance
.log("this is a string $message", level: LogLevel.Error);
@ -2235,6 +2250,12 @@ class EpicCashWallet extends CoinServiceAPI {
@override
bool validateAddress(String address) {
if (address.startsWith("http://") || address.startsWith("https://")) {
if (Uri.tryParse(address) != null) {
return true;
}
}
String validate = validateSendAddress(address);
if (int.parse(validate) == 1) {
return true;