Fix parsing of json to Map<String, dynamic> for ionia api. Update sing in and verify email methods for ionia api. (#604)

mkyq committed Nov 7, 2022 at 13:16 UTC 8981ebad566ecbe62ecb2ec766d86501663444b7
3 files changed +16 -22
lib/ionia/ionia_api.dart
+13 -17
@@ -36,8 +36,8 @@ class IoniaApi {
36 throw Exception('Unexpected http status: ${response.statusCode}');
37 }
38
39 - final bodyJson = json.decode(response.body) as Map<String, Object>;
40 - final data = bodyJson['Data'] as Map<String, Object>;
39 + final bodyJson = json.decode(response.body) as Map<String, dynamic>;
40 + final data = bodyJson['Data'] as Map<String, dynamic>;
41 final isSuccessful = bodyJson['Successful'] as bool;
42
43 if (!isSuccessful) {
@@ -50,13 +50,11 @@ class IoniaApi {
50 // Verify email
51
52 Future<IoniaUserCredentials> verifyEmail({
53 - required String username,
53 required String email,
54 required String code,
55 required String clientId}) async {
56 final headers = <String, String>{
57 'clientId': clientId,
59 - 'username': username,
58 'EmailAddress': email};
59 final query = <String, String>{'verificationCode': code};
60 final uri = verifyEmailUri.replace(queryParameters: query);
@@ -66,8 +64,8 @@ class IoniaApi {
64 throw Exception('Unexpected http status: ${response.statusCode}');
65 }
66
69 - final bodyJson = json.decode(response.body) as Map<String, Object>;
70 - final data = bodyJson['Data'] as Map<String, Object>;
67 + final bodyJson = json.decode(response.body) as Map<String, dynamic>;
68 + final data = bodyJson['Data'] as Map<String, dynamic>;
69 final isSuccessful = bodyJson['Successful'] as bool;
70
71 if (!isSuccessful) {
@@ -75,13 +73,13 @@ class IoniaApi {
73 }
74
75 final password = data['password'] as String;
78 - username = data['username'] as String;
76 + final username = data['username'] as String;
77 return IoniaUserCredentials(username, password);
78 }
79
80 // Sign In
81
84 - Future<String> signIn(String email, {required String clientId}) async {
82 + Future<void> signIn(String email, {required String clientId}) async {
83 final headers = <String, String>{'clientId': clientId};
84 final query = <String, String>{'emailAddress': email};
85 final uri = signInUri.replace(queryParameters: query);
@@ -91,15 +89,13 @@ class IoniaApi {
89 throw Exception('Unexpected http status: ${response.statusCode}');
90 }
91
94 - final bodyJson = json.decode(response.body) as Map<String, Object>;
95 - final data = bodyJson['Data'] as Map<String, Object>;
92 + final bodyJson = json.decode(response.body) as Map<String, dynamic>;
93 + final data = bodyJson['Data'] as Map<String, dynamic>;
94 final isSuccessful = bodyJson['Successful'] as bool;
95
96 if (!isSuccessful) {
97 throw Exception(data['ErrorMessage'] as String);
98 }
101 -
102 - return data['username'] as String;
99 }
100
101 // Get virtual card
@@ -118,15 +114,15 @@ class IoniaApi {
114 throw Exception('Unexpected http status: ${response.statusCode}');
115 }
116
121 - final bodyJson = json.decode(response.body) as Map<String, Object>;
122 - final data = bodyJson['Data'] as Map<String, Object>;
117 + final bodyJson = json.decode(response.body) as Map<String, dynamic>;
118 + final data = bodyJson['Data'] as Map<String, dynamic>;
119 final isSuccessful = bodyJson['Successful'] as bool;
120
121 if (!isSuccessful) {
122 throw Exception(data['message'] as String);
123 }
124
129 - final virtualCard = data['VirtualCard'] as Map<String, Object>;
125 + final virtualCard = data['VirtualCard'] as Map<String, dynamic>;
126 return IoniaVirtualCard.fromMap(virtualCard);
127 }
128
@@ -146,8 +142,8 @@ class IoniaApi {
142 throw Exception('Unexpected http status: ${response.statusCode}');
143 }
144
149 - final bodyJson = json.decode(response.body) as Map<String, Object>;
150 - final data = bodyJson['Data'] as Map<String, Object>;
145 + final bodyJson = json.decode(response.body) as Map<String, dynamic>;
146 + final data = bodyJson['Data'] as Map<String, dynamic>;
147 final isSuccessful = bodyJson['Successful'] as bool? ?? false;
148
149 if (!isSuccessful) {
lib/ionia/ionia_service.dart
+2 -4
@@ -31,9 +31,8 @@ class IoniaService {
31 // Verify email
32
33 Future<void> verifyEmail(String code) async {
34 - final username = (await secureStorage.read(key: ioniaUsernameStorageKey))!;
34 final email = (await secureStorage.read(key: ioniaEmailStorageKey))!;
36 - final credentials = await ioniaApi.verifyEmail(email: email, username: username, code: code, clientId: clientId);
35 + final credentials = await ioniaApi.verifyEmail(email: email, code: code, clientId: clientId);
36 await secureStorage.write(key: ioniaPasswordStorageKey, value: credentials.password);
37 await secureStorage.write(key: ioniaUsernameStorageKey, value: credentials.username);
38 }
@@ -41,9 +40,8 @@ class IoniaService {
40 // Sign In
41
42 Future<void> signIn(String email) async {
44 - final username = await ioniaApi.signIn(email, clientId: clientId);
43 + await ioniaApi.signIn(email, clientId: clientId);
44 await secureStorage.write(key: ioniaEmailStorageKey, value: email);
46 - await secureStorage.write(key: ioniaUsernameStorageKey, value: username);
45 }
46
47 Future<String> getUserEmail() async {
lib/ionia/ionia_virtual_card.dart
+1 -1
@@ -11,7 +11,7 @@ class IoniaVirtualCard {
11 required this.fundsLimit,
12 required this.spendLimit});
13
14 - factory IoniaVirtualCard.fromMap(Map<String, Object> source) {
14 + factory IoniaVirtualCard.fromMap(Map<String, dynamic> source) {
15 final created = source['created'] as String;
16 final createdAt = DateTime.tryParse(created);
17