CAKE-192 | parse_address_from_domain.dart fixed and split on 2 files (current and parse_address_from_domain_alert.dart), then moved to the entities directory; used one channel for native calls; removed unneeded spaces; fixed handle of unstoppable domain error in the MainActivity.java
OleksandrSobol committed
Jul 7, 2021 at 16:50 UTC
f995342491d1517a06390038a7acc63090fa5a57
8 files changed
+97
-100
android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java
+2
-8
@@ -21,7 +21,6 @@ import java.security.SecureRandom;
21
22
public class MainActivity extends FlutterFragmentActivity {
23
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
24
- final String UNSTOPPABLE_DOMAIN_CHANNEL = "com.cakewallet.cake_wallet/unstoppable-domain";
24
final int UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK = 24;
25
26
@Override
@@ -33,12 +32,6 @@ public class MainActivity extends FlutterFragmentActivity {
32
UTILS_CHANNEL);
33
34
utilsChannel.setMethodCallHandler(this::handle);
36
-
37
- MethodChannel unstoppableDomainChannel =
38
- new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(),
39
- UNSTOPPABLE_DOMAIN_CHANNEL);
40
-
41
- unstoppableDomainChannel.setMethodCallHandler(this::handle);
35
}
36
37
private void handle(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
@@ -80,7 +73,8 @@ public class MainActivity extends FlutterFragmentActivity {
73
String address = resolution.getAddress(domain, ticker);
74
handler.post(() -> result.success(address));
75
} catch (Exception e) {
83
- handler.post(() -> result.error("INVALID DOMAIN", e.getMessage(), null));
76
+ System.out.println("Expected Address, but got " + e.getMessage());
77
+ handler.post(() -> result.success(""));
78
}
79
});
80
}
ios/Runner/AppDelegate.swift
+22
-35
@@ -5,7 +5,7 @@ import UnstoppableDomainsResolution
5
@UIApplicationMain
6
@objc class AppDelegate: FlutterAppDelegate {
7
lazy var resolution : Resolution? = {
8
- return try? Resolution()
8
+ return try? Resolution()
9
}()
10
11
override func application(
@@ -75,45 +75,32 @@ import UnstoppableDomainsResolution
75
}
76
77
result(secRandom(count: count))
78
+ case "getUnstoppableDomainAddress":
79
+ guard let args = call.arguments as? Dictionary<String, String>,
80
+ let domain = args["domain"],
81
+ let ticker = args["ticker"],
82
+ let resolution = self?.resolution else {
83
+ result(nil)
84
+ return
85
+ }
86
+
87
+ resolution.addr(domain: domain, ticker: ticker) { addrResult in
88
+ var address : String = ""
89
+
90
+ switch addrResult {
91
+ case .success(let returnValue):
92
+ address = returnValue
93
+ case .failure(let error):
94
+ print("Expected Address, but got \(error)")
95
+ }
96
+
97
+ result(address)
98
+ }
99
default:
100
result(FlutterMethodNotImplemented)
101
}
102
})
103
83
- let unstoppableDomainChannel = FlutterMethodChannel(name: "com.cakewallet.cake_wallet/unstoppable-domain", binaryMessenger: controller.binaryMessenger)
84
- unstoppableDomainChannel.setMethodCallHandler({ [weak self]
85
- (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
86
- switch call.method {
87
- case "getUnstoppableDomainAddress":
88
- guard let args = call.arguments as? Dictionary<String, String>,
89
- let domain = args["domain"],
90
- let ticker = args["ticker"] else {
91
- result(nil)
92
- return
93
- }
94
-
95
- guard let resolution = self?.resolution else {
96
- result(nil)
97
- return
98
- }
99
-
100
- resolution.addr(domain: domain, ticker: ticker) { addrResult in
101
- var address : String = ""
102
-
103
- switch addrResult {
104
- case .success(let returnValue):
105
- address = returnValue
106
- case .failure(let error):
107
- print("Expected Address, but got \(error)")
108
- }
109
-
110
- result(address)
111
- }
112
- default:
113
- result(FlutterMethodNotImplemented)
114
- }
115
- })
116
-
104
GeneratedPluginRegistrant.register(with: self)
105
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
106
}
lib/entities/parse_address_from_domain.dart
new
+52
@@ -0,0 +1,52 @@
1
+import 'package:cake_wallet/entities/openalias_record.dart';
2
+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';
6
+
7
+const topLevelDomain = 'crypto';
8
+
9
+Future<String> parseAddressFromDomain(
10
+ BuildContext context, String domain, String ticker) async {
11
+ try {
12
+ final domainParts = domain.split('.');
13
+ final name = domainParts.last;
14
+
15
+ if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) {
16
+ return domain;
17
+ }
18
+
19
+ if (name.contains(topLevelDomain)) {
20
+ final address = await fetchUnstoppableDomainAddress(domain, ticker);
21
+
22
+ if (address?.isEmpty ?? true) {
23
+ return domain;
24
+ }
25
+
26
+ showAddressAlert(
27
+ context,
28
+ S.of(context).address_detected,
29
+ S.of(context).address_from_domain(domain));
30
+
31
+ return address;
32
+ }
33
+
34
+ final record = await OpenaliasRecord.fetchAddressAndName(
35
+ OpenaliasRecord.formatDomainName(domain));
36
+
37
+ if (record == null || record.address.contains(domain)) {
38
+ return domain;
39
+ }
40
+
41
+ showAddressAlert(
42
+ context,
43
+ S.of(context).openalias_alert_title,
44
+ S.of(context).openalias_alert_content(domain));
45
+
46
+ return record.address;
47
+ } catch (e) {
48
+ print(e.toString());
49
+ }
50
+
51
+ return domain;
52
+}
\ No newline at end of file
lib/entities/unstoppable_domain_address.dart
+2
-2
@@ -1,9 +1,9 @@
1
import 'package:flutter/services.dart';
2
3
-const channel = MethodChannel('com.cakewallet.cake_wallet/unstoppable-domain');
3
+const channel = MethodChannel('com.cake_wallet/native_utils');
4
5
Future<String> fetchUnstoppableDomainAddress(String domain, String ticker) async {
6
- String address;
6
+ var address = '';
7
8
try {
9
address = await channel.invokeMethod(
lib/src/screens/exchange/exchange_page.dart
+1
-1
@@ -1,7 +1,7 @@
1
import 'dart:ui';
2
import 'package:cake_wallet/entities/sync_status.dart';
3
import 'package:cake_wallet/entities/wallet_type.dart';
4
-import 'package:cake_wallet/src/screens/send/parse_address_from_domain.dart';
4
+import 'package:cake_wallet/entities/parse_address_from_domain.dart';
5
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
6
import 'package:dotted_border/dotted_border.dart';
7
import 'package:flutter/cupertino.dart';
lib/src/screens/send/parse_address_from_domain.dart
deleted
-53
@@ -1,53 +0,0 @@
1
-import 'package:cake_wallet/entities/openalias_record.dart';
2
-import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
3
-import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
4
-import 'package:cake_wallet/utils/show_pop_up.dart';
5
-import 'package:flutter/material.dart';
6
-import 'package:cake_wallet/generated/i18n.dart';
7
-
8
-const topLevelDomain = 'crypto';
9
-
10
-Future<String> parseAddressFromDomain(
11
- BuildContext context, String domain, String ticker) async {
12
- try {
13
- final name = domain.split('.').last;
14
-
15
- if (name.contains(topLevelDomain)) {
16
- final address = await fetchUnstoppableDomainAddress(domain, ticker);
17
- if (address.isNotEmpty) {
18
- showAddressAlert(
19
- context,
20
- S.of(context).address_detected,
21
- S.of(context).address_from_domain(domain));
22
- return address;
23
- }
24
- } else if (name.isNotEmpty) {
25
- final record = await OpenaliasRecord.fetchAddressAndName(
26
- OpenaliasRecord.formatDomainName(domain));
27
- if (record.name != null && record.name != domain) {
28
- showAddressAlert(
29
- context,
30
- S.of(context).openalias_alert_title,
31
- S.of(context).openalias_alert_content(domain));
32
- return record.address;
33
- }
34
- }
35
- } catch (e) {
36
- print(e.toString());
37
- }
38
-
39
- return domain;
40
-}
41
-
42
-void showAddressAlert(BuildContext context, String title, String content) async {
43
- await showPopUp<void>(
44
- context: context,
45
- builder: (BuildContext context) {
46
-
47
- return AlertWithOneAction(
48
- alertTitle: title,
49
- alertContent: content,
50
- buttonText: S.of(context).ok,
51
- buttonAction: () => Navigator.of(context).pop());
52
- });
53
-}
\ No newline at end of file
lib/src/screens/send/send_page.dart
+1
-1
@@ -1,6 +1,6 @@
1
import 'dart:ui';
2
import 'package:cake_wallet/entities/transaction_priority.dart';
3
-import 'package:cake_wallet/src/screens/send/parse_address_from_domain.dart';
3
+import 'package:cake_wallet/entities/parse_address_from_domain.dart';
4
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
5
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
6
import 'package:cake_wallet/src/widgets/picker.dart';
lib/src/screens/send/widgets/parse_address_from_domain_alert.dart
new
+17
@@ -0,0 +1,17 @@
1
+import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
2
+import 'package:cake_wallet/utils/show_pop_up.dart';
3
+import 'package:flutter/material.dart';
4
+import 'package:cake_wallet/generated/i18n.dart';
5
+
6
+void showAddressAlert(BuildContext context, String title, String content) async {
7
+ await showPopUp<void>(
8
+ context: context,
9
+ builder: (BuildContext context) {
10
+
11
+ return AlertWithOneAction(
12
+ alertTitle: title,
13
+ alertContent: content,
14
+ buttonText: S.of(context).ok,
15
+ buttonAction: () => Navigator.of(context).pop());
16
+ });
17
+}
\ No newline at end of file