CAKE-192 | created ParsedAddress class; applied this class to parse_address_from_domain.dart, send_page.dart and exchange_page.dart
OleksandrSobol committed
Jul 7, 2021 at 17:31 UTC
bac491c44f33e6ba0b69fd74dc2fd7bb378b3c5e
4 files changed
+70
-29
lib/entities/parse_address_from_domain.dart
+9
-21
@@ -1,52 +1,40 @@
1
import 'package:cake_wallet/entities/openalias_record.dart';
2
+import 'package:cake_wallet/entities/parsed_address.dart';
3
import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
3
-import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart';
4
-import 'package:flutter/material.dart';
5
-import 'package:cake_wallet/generated/i18n.dart';
4
5
const topLevelDomain = 'crypto';
6
9
-Future<String> parseAddressFromDomain(
10
- BuildContext context, String domain, String ticker) async {
7
+Future<ParsedAddress> parseAddressFromDomain(
8
+ String domain, String ticker) async {
9
try {
10
final domainParts = domain.split('.');
11
final name = domainParts.last;
12
13
if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) {
16
- return domain;
14
+ return ParsedAddress(domain, ParseFrom.notParsed);
15
}
16
17
if (name.contains(topLevelDomain)) {
18
final address = await fetchUnstoppableDomainAddress(domain, ticker);
19
20
if (address?.isEmpty ?? true) {
23
- return domain;
21
+ return ParsedAddress(domain, ParseFrom.notParsed);
22
}
23
26
- showAddressAlert(
27
- context,
28
- S.of(context).address_detected,
29
- S.of(context).address_from_domain(domain));
30
-
31
- return address;
24
+ return ParsedAddress(address, ParseFrom.unstoppableDomains);
25
}
26
27
final record = await OpenaliasRecord.fetchAddressAndName(
28
OpenaliasRecord.formatDomainName(domain));
29
30
if (record == null || record.address.contains(domain)) {
38
- return domain;
31
+ return ParsedAddress(domain, ParseFrom.notParsed);
32
}
33
41
- showAddressAlert(
42
- context,
43
- S.of(context).openalias_alert_title,
44
- S.of(context).openalias_alert_content(domain));
45
-
46
- return record.address;
34
+ return ParsedAddress(record.address, ParseFrom.openAlias);
35
} catch (e) {
36
print(e.toString());
37
}
38
51
- return domain;
39
+ return ParsedAddress(domain, ParseFrom.notParsed);
40
}
\ No newline at end of file
lib/entities/parsed_address.dart
new
+8
@@ -0,0 +1,8 @@
1
+enum ParseFrom {unstoppableDomains, openAlias, notParsed}
2
+
3
+class ParsedAddress {
4
+ ParsedAddress(this.address, this.parseFrom);
5
+
6
+ final String address;
7
+ final ParseFrom parseFrom;
8
+}
\ No newline at end of file
lib/src/screens/exchange/exchange_page.dart
+32
-6
@@ -1,7 +1,9 @@
1
import 'dart:ui';
2
+import 'package:cake_wallet/entities/parsed_address.dart';
3
import 'package:cake_wallet/entities/sync_status.dart';
4
import 'package:cake_wallet/entities/wallet_type.dart';
5
import 'package:cake_wallet/entities/parse_address_from_domain.dart';
6
+import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart';
7
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
8
import 'package:dotted_border/dotted_border.dart';
9
import 'package:flutter/cupertino.dart';
@@ -229,7 +231,7 @@ class ExchangePage extends BasePage {
231
final ticker = exchangeViewModel
232
.depositCurrency.title.toLowerCase();
233
exchangeViewModel.depositAddress =
232
- await parseAddressFromDomain(
234
+ await applyOpenaliasOrUnstoppableDomains(
235
context, domain, ticker);
236
},
237
),
@@ -284,7 +286,7 @@ class ExchangePage extends BasePage {
286
final ticker = exchangeViewModel
287
.receiveCurrency.title.toLowerCase();
288
exchangeViewModel.receiveAddress =
287
- await parseAddressFromDomain(
289
+ await applyOpenaliasOrUnstoppableDomains(
290
context, domain, ticker);
291
},
292
)),
@@ -514,12 +516,12 @@ class ExchangePage extends BasePage {
516
var domain = template.depositAddress;
517
var ticker = template.depositCurrency.toLowerCase();
518
exchangeViewModel.depositAddress =
517
- await parseAddressFromDomain(context, domain, ticker);
519
+ await applyOpenaliasOrUnstoppableDomains(context, domain, ticker);
520
521
domain = template.receiveAddress;
522
ticker = template.receiveCurrency.toLowerCase();
523
exchangeViewModel.receiveAddress =
522
- await parseAddressFromDomain(context, domain, ticker);
524
+ await applyOpenaliasOrUnstoppableDomains(context, domain, ticker);
525
}
526
527
void _setReactions(
@@ -691,7 +693,7 @@ class ExchangePage extends BasePage {
693
final domain = depositAddressController.text;
694
final ticker = exchangeViewModel.depositCurrency.title.toLowerCase();
695
exchangeViewModel.depositAddress =
694
- await parseAddressFromDomain(context, domain, ticker);
696
+ await applyOpenaliasOrUnstoppableDomains(context, domain, ticker);
697
}
698
});
699
@@ -701,7 +703,7 @@ class ExchangePage extends BasePage {
703
final domain = receiveAddressController.text;
704
final ticker = exchangeViewModel.receiveCurrency.title.toLowerCase();
705
exchangeViewModel.receiveAddress =
704
- await parseAddressFromDomain(context, domain, ticker);
706
+ await applyOpenaliasOrUnstoppableDomains(context, domain, ticker);
707
}
708
});
709
@@ -775,4 +777,28 @@ class ExchangePage extends BasePage {
777
key.currentState.addressController.text = null;
778
}
779
}
780
+
781
+ Future<String> applyOpenaliasOrUnstoppableDomains(
782
+ BuildContext context, String domain, String ticker) async {
783
+ final parsedAddress = await parseAddressFromDomain(domain, ticker);
784
+
785
+ switch (parsedAddress.parseFrom) {
786
+ case ParseFrom.unstoppableDomains:
787
+ showAddressAlert(
788
+ context,
789
+ S.of(context).address_detected,
790
+ S.of(context).address_from_domain(domain));
791
+ break;
792
+ case ParseFrom.openAlias:
793
+ showAddressAlert(
794
+ context,
795
+ S.of(context).openalias_alert_title,
796
+ S.of(context).openalias_alert_content(domain));
797
+ break;
798
+ case ParseFrom.notParsed:
799
+ break;
800
+ }
801
+
802
+ return parsedAddress.address;
803
+ }
804
}
lib/src/screens/send/send_page.dart
+21
-2
@@ -1,6 +1,8 @@
1
import 'dart:ui';
2
+import 'package:cake_wallet/entities/parsed_address.dart';
3
import 'package:cake_wallet/entities/transaction_priority.dart';
4
import 'package:cake_wallet/entities/parse_address_from_domain.dart';
5
+import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart';
6
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
7
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
8
import 'package:cake_wallet/src/widgets/picker.dart';
@@ -757,7 +759,24 @@ class SendPage extends BasePage {
759
void applyOpenaliasOrUnstoppableDomains(BuildContext context) async {
760
final domain = _addressController.text;
761
final ticker = sendViewModel.currency.title.toLowerCase();
760
- _addressController.text =
761
- await parseAddressFromDomain(context, domain, ticker);
762
+ final parsedAddress = await parseAddressFromDomain(domain, ticker);
763
+ _addressController.text = parsedAddress.address;
764
+
765
+ switch (parsedAddress.parseFrom) {
766
+ case ParseFrom.unstoppableDomains:
767
+ showAddressAlert(
768
+ context,
769
+ S.of(context).address_detected,
770
+ S.of(context).address_from_domain(domain));
771
+ break;
772
+ case ParseFrom.openAlias:
773
+ showAddressAlert(
774
+ context,
775
+ S.of(context).openalias_alert_title,
776
+ S.of(context).openalias_alert_content(domain));
777
+ break;
778
+ case ParseFrom.notParsed:
779
+ break;
780
+ }
781
}
782
}