Skip to content

Commit 0615e93

Browse files
committed
Integrating exchange rates api
1 parent a3b9c49 commit 0615e93

File tree

2 files changed

+170
-29
lines changed

2 files changed

+170
-29
lines changed

lib/channels/api_channel.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:convert';
22

33
import 'package:flutter/services.dart';
44
import 'package:sentinelx/models/dojo.dart';
5+
import 'package:sentinelx/models/exchange_rate.dart';
56
import 'package:sentinelx/models/tx_details_response.dart';
67

78
class ApiChannel {
@@ -38,8 +39,8 @@ class ApiChannel {
3839
Future<TxDetailsResponse> getTx(String txid) async {
3940
try {
4041
String response = await platform.invokeMethod("getTx", {'txid': txid});
41-
TxDetailsResponse txDetailsResponse = TxDetailsResponse.fromJson(
42-
jsonDecode(response));
42+
TxDetailsResponse txDetailsResponse =
43+
TxDetailsResponse.fromJson(jsonDecode(response));
4344
return txDetailsResponse;
4445
} catch (error) {
4546
print(error);
@@ -61,12 +62,19 @@ class ApiChannel {
6162
return Future.value(auth);
6263
}
6364

64-
Future<bool> setDojo(String accessToken, String refreshToken, String url) async {
65+
Future<bool> setDojo(
66+
String accessToken, String refreshToken, String url) async {
6567
await platform.invokeMethod("setDojo", {
6668
'accessToken': accessToken,
6769
"refreshToken": refreshToken,
6870
"dojoUrl": url
6971
});
7072
return Future.value(true);
7173
}
74+
75+
Future<String> getExchangeRates(String url) async {
76+
String response =
77+
await platform.invokeMethod("getExchangeRates", {"url": url});
78+
return Future.value(response);
79+
}
7280
}

lib/models/exchange/LocalBitcoinRateProvider.dart

Lines changed: 159 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,192 @@ import 'package:sentinelx/models/exchange/exchange_provider.dart';
44
import 'package:sentinelx/models/exchange/rate.dart';
55

66
class LocalBitcoinRateProvider implements ExchangeProvider {
7-
static String API =
8-
"https://localbitcoins.com/bitcoinaverage/ticker-all-currencies/";
7+
static String API = "https://localbitcoins.com/bitcoinaverage/ticker-all-currencies/";
8+
9+
List<Map<String, String>> ratePeriods = [
10+
{"key": "avg_1h", "title": "1 hour Average"},
11+
{"key": "avg_6h", "title": "6 hour Average"},
12+
{"key": "avg_12h", "title": "12 hour Average"},
13+
{"key": "avg_24h", "title": "24 hour Average"},
14+
];
915

1016
@override
1117
String payload;
1218

1319
@override
1420
String currency;
1521

22+
@override
23+
String _selectedPeriod = "avg_24h";
24+
1625
Map<String, dynamic> rates = new Map();
1726

18-
LocalBitcoinRateProvider(this.payload) {
19-
rates = jsonDecode(this.payload);
27+
LocalBitcoinRateProvider(this.payload, String period) {
28+
if (period != null || period.isNotEmpty) {
29+
this._selectedPeriod = period;
30+
}
31+
var tempRate = rates;
32+
try {
33+
rates = jsonDecode(this.payload);
34+
} on Exception catch (ex) {
35+
rates = tempRate;
36+
}
2037
}
2138

2239
@override
2340
Rate getRate() {
2441
Rate rate = new Rate();
2542
rate.currency = this.currency;
26-
print("rate.currencyrate.currencyrate.currency ${rate.rate}");
43+
2744
if (rates.containsKey(this.currency)) {
2845
LBTCRateModel rateModel = LBTCRateModel.fromJson(rates[this.currency]);
29-
if (rateModel.avg6h != null) {
30-
rate.rate = double.parse(rateModel.avg6h);
46+
switch (_selectedPeriod) {
47+
case "avg_24h":
48+
{
49+
if (rateModel.avg24h != null) {
50+
rate.rate = double.parse(rateModel.avg24h);
51+
}
52+
break;
53+
}
54+
case "avg_12h":
55+
{
56+
if (rateModel.avg12h != null) {
57+
rate.rate = double.parse(rateModel.avg12h);
58+
}
59+
break;
60+
}
61+
case "avg_6h":
62+
{
63+
if (rateModel.avg6h != null) {
64+
rate.rate = double.parse(rateModel.avg6h);
65+
}
66+
break;
67+
}
68+
case "avg_1h":
69+
{
70+
if (rateModel.avg1h != null) {
71+
rate.rate = double.parse(rateModel.avg1h);
72+
}
73+
break;
74+
}
75+
default:
76+
{
77+
if (rateModel.avg24h != null) {
78+
rate.rate = double.parse(rateModel.avg24h);
79+
}
80+
}
3181
}
32-
// else if (rateModel.avg12h != null) {
33-
// rate.rate = double.parse(rateModel.avg12h);
34-
// print("rate } avg12h");
35-
//
36-
// } else if (rateModel.avg24h != null) {
37-
// rate.rate = double.parse(rateModel.avg24h);
38-
// print("rate } avg24h");
39-
//
40-
// }
4182
return rate;
42-
83+
} else {
84+
rate.rate = 1;
85+
this.currency = "BTC";
86+
rate.currency = "BTC";
87+
return rate;
4388
}
44-
print("rate } _____ ${rate.toJson()}");
89+
}
90+
91+
set selectedPeriod(String value) {
92+
_selectedPeriod = value;
4593
}
4694

4795
@override
4896
String getProviderName() {
4997
return "LBTC";
5098
}
5199

100+
@override
101+
final List<String> availableCurrencies = [
102+
"USD",
103+
"EUR",
104+
"INR",
105+
"COP",
106+
"BOB",
107+
"TWD",
108+
"GHS",
109+
"NGN",
110+
"EGP",
111+
"IDR",
112+
"BGN",
113+
"SZL",
114+
"CRC",
115+
"PEN",
116+
"AMD",
117+
"ILS",
118+
"GBP",
119+
"MWK",
120+
"DOP",
121+
"BAM",
122+
"XRP",
123+
"DKK",
124+
"RSD",
125+
"AUD",
126+
"PKR",
127+
"JPY",
128+
"TZS",
129+
"VND",
130+
"KWD",
131+
"RON",
132+
"HUF",
133+
"CLP",
134+
"MYR",
135+
"GTQ",
136+
"JMD",
137+
"ZMW",
138+
"UAH",
139+
"JOD",
140+
"LTC",
141+
"SAR",
142+
"ETH",
143+
"CAD",
144+
"SEK",
145+
"SGD",
146+
"HKD",
147+
"GEL",
148+
"BWP",
149+
"VES",
150+
"CHF",
151+
"IRR",
152+
"BBD",
153+
"KRW",
154+
"CNY",
155+
"XOF",
156+
"BDT",
157+
"HRK",
158+
"NZD",
159+
"TRY",
160+
"THB",
161+
"XAF",
162+
"BYN",
163+
"ARS",
164+
"UYU",
165+
"RWF",
166+
"KZT",
167+
"NOK",
168+
"RUB",
169+
"ZAR",
170+
"PYG",
171+
"PAB",
172+
"MXN",
173+
"CZK",
174+
"BRL",
175+
"MAD",
176+
"PLN",
177+
"PHP",
178+
"KES",
179+
"AED"
180+
];
181+
52182
@override
53183
setCurrency(String currency) {
54-
return this.currency = currency;
184+
this.currency = currency;
185+
}
186+
187+
@override
188+
String getSelectedPeriod() {
189+
return this.ratePeriods.firstWhere((item) {
190+
return item["key"] == _selectedPeriod;
191+
})['title'];
192+
return null;
55193
}
56194
}
57195

@@ -64,13 +202,7 @@ class LBTCRateModel {
64202
Rates rates;
65203
String avg6h;
66204

67-
LBTCRateModel(
68-
{this.avg12h,
69-
this.volumeBtc,
70-
this.avg24h,
71-
this.avg1h,
72-
this.rates,
73-
this.avg6h});
205+
LBTCRateModel({this.avg12h, this.volumeBtc, this.avg24h, this.avg1h, this.rates, this.avg6h});
74206

75207
LBTCRateModel.fromJson(Map<String, dynamic> json) {
76208
avg12h = json['avg_12h'];
@@ -91,6 +223,7 @@ class LBTCRateModel {
91223
data['rates'] = this.rates.toJson();
92224
}
93225
data['avg_6h'] = this.avg6h;
226+
94227
return data;
95228
}
96229
}

0 commit comments

Comments
 (0)