Flutter upgrade

This commit is contained in:
M
2022-10-12 13:09:57 -04:00
parent c921ad890a
commit 1beb18b045
505 changed files with 6657 additions and 5875 deletions
@@ -1,6 +1,5 @@
import 'dart:convert';
import 'package:cake_wallet/exchange/trade_not_found_exeption.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import 'package:cake_wallet/.secrets.g.dart' as secrets;
import 'package:cw_core/crypto_currency.dart';
@@ -56,8 +55,10 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
static String getFlow(bool isFixedRate) => isFixedRate ? 'fixed-rate' : 'standard';
@override
Future<Limits> fetchLimits({CryptoCurrency from, CryptoCurrency to,
bool isFixedRateMode}) async {
Future<Limits> fetchLimits({
required CryptoCurrency from,
required CryptoCurrency to,
required bool isFixedRateMode}) async {
final headers = {apiHeaderKey: apiKey};
final normalizedFrom = normalizeCryptoCurrency(from);
final normalizedTo = normalizeCryptoCurrency(to);
@@ -79,7 +80,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -89,7 +90,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> createTrade({TradeRequest request, bool isFixedRateMode}) async {
Future<Trade> createTrade({required TradeRequest request, required bool isFixedRateMode}) async {
final _request = request as ChangeNowRequest;
final headers = {
apiHeaderKey: apiKey,
@@ -122,7 +123,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -145,7 +146,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> findTradeById({@required String id}) async {
Future<Trade> findTradeById({required String id}) async {
final headers = {apiHeaderKey: apiKey};
final params = <String, String>{'id': id};
final uri = Uri.https(apiAuthority,findTradeByIdPath, params);
@@ -164,7 +165,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -198,11 +199,11 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
@override
Future<double> calculateAmount(
{CryptoCurrency from,
CryptoCurrency to,
double amount,
bool isFixedRateMode,
bool isReceiveAmount}) async {
{required CryptoCurrency from,
required CryptoCurrency to,
required double amount,
required bool isFixedRateMode,
required bool isReceiveAmount}) async {
try {
if (amount == 0) {
return 0.0;
@@ -250,7 +251,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
return CryptoCurrency.btc.title.toLowerCase();
default:
return currency.tag != null
? currency.tag.toLowerCase()
? currency.tag!.toLowerCase()
: currency.title.toLowerCase();
}
}
@@ -4,13 +4,13 @@ import 'package:cake_wallet/exchange/trade_request.dart';
class ChangeNowRequest extends TradeRequest {
ChangeNowRequest(
{@required this.from,
@required this.to,
@required this.address,
@required this.fromAmount,
@required this.toAmount,
@required this.refundAddress,
@required this.isReverse});
{required this.from,
required this.to,
required this.address,
required this.fromAmount,
required this.toAmount,
required this.refundAddress,
required this.isReverse});
CryptoCurrency from;
CryptoCurrency to;
+4 -1
View File
@@ -1,7 +1,10 @@
import 'package:cw_core/crypto_currency.dart';
class ExchangePair {
ExchangePair({this.from, this.to, this.reverse = true});
ExchangePair({
required this.from,
required this.to,
this.reverse = true});
final CryptoCurrency from;
final CryptoCurrency to;
+15 -7
View File
@@ -7,11 +7,11 @@ import 'package:cake_wallet/exchange/trade.dart';
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
abstract class ExchangeProvider {
ExchangeProvider({this.pairList});
ExchangeProvider({required this.pairList});
String get title;
List<ExchangePair> pairList;
ExchangeProviderDescription description;
ExchangeProviderDescription get description;
bool get isAvailable;
bool get isEnabled;
@@ -19,10 +19,18 @@ abstract class ExchangeProvider {
String toString() => title;
Future<Limits> fetchLimits(
{CryptoCurrency from, CryptoCurrency to, bool isFixedRateMode});
Future<Trade> createTrade({TradeRequest request, bool isFixedRateMode});
Future<Trade> findTradeById({@required String id});
Future<double> calculateAmount({CryptoCurrency from, CryptoCurrency to,
double amount, bool isFixedRateMode, bool isReceiveAmount});
{required CryptoCurrency from,
required CryptoCurrency to,
required bool isFixedRateMode});
Future<Trade> createTrade({
required TradeRequest request,
required bool isFixedRateMode});
Future<Trade> findTradeById({required String id});
Future<double> calculateAmount({
required CryptoCurrency from,
required CryptoCurrency to,
required double amount,
required bool isFixedRateMode,
required bool isReceiveAmount});
Future<bool> checkIsAvailable();
}
@@ -2,7 +2,11 @@ import 'package:cw_core/enumerable_item.dart';
class ExchangeProviderDescription extends EnumerableItem<int>
with Serializable<int> {
const ExchangeProviderDescription({String title, int raw, this.horizontalLogo = false, this.image})
const ExchangeProviderDescription({
required String title,
required int raw,
required this.image,
this.horizontalLogo = false})
: super(title: title, raw: raw);
final bool horizontalLogo;
@@ -20,7 +24,7 @@ class ExchangeProviderDescription extends EnumerableItem<int>
static const simpleSwap =
ExchangeProviderDescription(title: 'SimpleSwap', raw: 4, image: 'assets/images/simpleSwap.png');
static ExchangeProviderDescription deserialize({int raw}) {
static ExchangeProviderDescription deserialize({required int raw}) {
switch (raw) {
case 0:
return xmrto;
@@ -33,7 +37,7 @@ class ExchangeProviderDescription extends EnumerableItem<int>
case 4:
return simpleSwap;
default:
return null;
throw Exception('Unexpected token: $raw for ExchangeProviderDescription deserialize');
}
}
}
+6 -6
View File
@@ -5,12 +5,12 @@ part 'exchange_template.g.dart';
@HiveType(typeId: ExchangeTemplate.typeId)
class ExchangeTemplate extends HiveObject {
ExchangeTemplate({
this.amount,
this.depositCurrency,
this.receiveCurrency,
this.provider,
this.depositAddress,
this.receiveAddress
required this.amount,
required this.depositCurrency,
required this.receiveCurrency,
required this.provider,
required this.depositAddress,
required this.receiveAddress
});
static const typeId = 7;
+2 -2
View File
@@ -8,13 +8,13 @@ class ExchangeTradeStateInitial extends ExchangeTradeState {}
class TradeIsCreating extends ExchangeTradeState {}
class TradeIsCreatedSuccessfully extends ExchangeTradeState {
TradeIsCreatedSuccessfully({@required this.trade});
TradeIsCreatedSuccessfully({required this.trade});
final Trade trade;
}
class TradeIsCreatedFailure extends ExchangeTradeState {
TradeIsCreatedFailure({@required this.title, @required this.error});
TradeIsCreatedFailure({required this.title, required this.error});
final String title;
final String error;
+2 -2
View File
@@ -1,6 +1,6 @@
class Limits {
const Limits({this.min, this.max});
final double min;
final double max;
final double? min;
final double? max;
}
+2 -2
View File
@@ -8,13 +8,13 @@ class LimitsInitialState extends LimitsState {}
class LimitsIsLoading extends LimitsState {}
class LimitsLoadedSuccessfully extends LimitsState {
LimitsLoadedSuccessfully({@required this.limits});
LimitsLoadedSuccessfully({required this.limits});
final Limits limits;
}
class LimitsLoadedFailure extends LimitsState {
LimitsLoadedFailure({@required this.error});
LimitsLoadedFailure({required this.error});
final String error;
}
@@ -16,7 +16,7 @@ import 'package:cake_wallet/exchange/exchange_provider_description.dart';
import 'package:cake_wallet/exchange/trade_not_created_exeption.dart';
class MorphTokenExchangeProvider extends ExchangeProvider {
MorphTokenExchangeProvider({@required this.trades})
MorphTokenExchangeProvider({required this.trades})
: super(pairList: [
ExchangePair(from: CryptoCurrency.xmr, to: CryptoCurrency.eth),
ExchangePair(from: CryptoCurrency.xmr, to: CryptoCurrency.bch),
@@ -74,8 +74,12 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
Future<bool> checkIsAvailable() async => true;
@override
Future<Limits> fetchLimits({CryptoCurrency from, CryptoCurrency to, bool isFixedRateMode}) async {
Future<Limits> fetchLimits({
required CryptoCurrency from,
required CryptoCurrency to,
required bool isFixedRateMode}) async {
final url = apiUri + _limitsURISuffix;
final uri = Uri.parse(url);
final headers = {'Content-type': 'application/json'};
final body = json.encode({
"input": {"asset": from.toString()},
@@ -83,11 +87,11 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
{"asset": to.toString(), "weight": weight}
]
});
final response = await post(url, headers: headers, body: body);
final response = await post(uri, headers: headers, body: body);
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
final min = responseJSON['input']['limits']['min'] as int;
int max;
int max = 0;
double ethMax;
if (from == CryptoCurrency.eth) {
@@ -96,14 +100,16 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
max = responseJSON['input']['limits']['max'] as int;
}
double minFormatted = AmountConverter.amountIntToDouble(from, min);
double maxFormatted = AmountConverter.amountIntToDouble(from, max);
final minFormatted = AmountConverter.amountIntToDouble(from, min);
final maxFormatted = AmountConverter.amountIntToDouble(from, max);
return Limits(min: minFormatted, max: maxFormatted);
}
@override
Future<Trade> createTrade({TradeRequest request, bool isFixedRateMode}) async {
Future<Trade> createTrade({
required TradeRequest request,
required bool isFixedRateMode}) async {
const url = apiUri + _morphURISuffix;
final _request = request as MorphTokenRequest;
final body = {
@@ -120,8 +126,8 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
],
"tag": "cakewallet"
};
final response = await post(url,
final uri = Uri.parse(url);
final response = await post(uri,
headers: {'Content-Type': 'application/json'}, body: json.encode(body));
if (response.statusCode != 200) {
@@ -149,9 +155,10 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> findTradeById({@required String id}) async {
Future<Trade> findTradeById({required String id}) async {
final url = apiUri + _morphURISuffix + '/' + id;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
if (response.statusCode != 200) {
if (response.statusCode == 400) {
@@ -194,17 +201,21 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
@override
Future<double> calculateAmount(
{CryptoCurrency from, CryptoCurrency to, double amount, bool isFixedRateMode,
bool isReceiveAmount}) async {
{required CryptoCurrency from,
required CryptoCurrency to,
required double amount,
required bool isFixedRateMode,
required bool isReceiveAmount}) async {
final url = apiUri + _ratesURISuffix;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
final rate = responseJSON['data'][from.toString()][to.toString()] as String;
try {
final estimatedAmount = double.parse(rate) * amount;
return estimatedAmount;
} catch (e) {
} catch (_) {
return 0.0;
}
}
@@ -4,11 +4,11 @@ import 'package:cake_wallet/exchange/trade_request.dart';
class MorphTokenRequest extends TradeRequest {
MorphTokenRequest(
{@required this.from,
@required this.to,
@required this.address,
@required this.amount,
@required this.refundAddress});
{required this.from,
required this.to,
required this.address,
required this.amount,
required this.refundAddress});
CryptoCurrency from;
CryptoCurrency to;
@@ -40,11 +40,11 @@ class SideShiftExchangeProvider extends ExchangeProvider {
@override
Future<double> calculateAmount(
{CryptoCurrency from,
CryptoCurrency to,
double amount,
bool isFixedRateMode,
bool isReceiveAmount}) async {
{required CryptoCurrency from,
required CryptoCurrency to,
required double amount,
required bool isFixedRateMode,
required bool isReceiveAmount}) async {
try {
if (amount == 0) {
return 0.0;
@@ -53,7 +53,8 @@ class SideShiftExchangeProvider extends ExchangeProvider {
final toCurrency = _normalizeCryptoCurrency(to);
final url =
apiBaseUrl + rangePath + '/' + fromCurrency + '/' + toCurrency;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
final rate = double.parse(responseJSON['rate'] as String);
final max = double.parse(responseJSON['max'] as String);
@@ -71,7 +72,8 @@ class SideShiftExchangeProvider extends ExchangeProvider {
@override
Future<bool> checkIsAvailable() async {
const url = apiBaseUrl + permissionPath;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
if (response.statusCode == 500) {
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -92,7 +94,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
@override
Future<Trade> createTrade(
{TradeRequest request, bool isFixedRateMode}) async {
{required TradeRequest request, required bool isFixedRateMode}) async {
final _request = request as SideShiftRequest;
final quoteId = await _createQuote(_request);
final url = apiBaseUrl + orderPath;
@@ -104,7 +106,8 @@ class SideShiftExchangeProvider extends ExchangeProvider {
'settleAddress': _request.settleAddress,
'refundAddress': _request.refundAddress
};
final response = await post(url, headers: headers, body: json.encode(body));
final uri = Uri.parse(url);
final response = await post(uri, headers: headers, body: json.encode(body));
if (response.statusCode != 201) {
if (response.statusCode == 400) {
@@ -146,7 +149,8 @@ class SideShiftExchangeProvider extends ExchangeProvider {
'affiliateId': affiliateId,
'depositAmount': request.depositAmount,
};
final response = await post(url, headers: headers, body: json.encode(body));
final uri = Uri.parse(url);
final response = await post(uri, headers: headers, body: json.encode(body));
if (response.statusCode != 201) {
if (response.statusCode == 400) {
@@ -167,11 +171,14 @@ class SideShiftExchangeProvider extends ExchangeProvider {
@override
Future<Limits> fetchLimits(
{CryptoCurrency from, CryptoCurrency to, bool isFixedRateMode}) async {
{required CryptoCurrency from,
required CryptoCurrency to,
required bool isFixedRateMode}) async {
final fromCurrency = _normalizeCryptoCurrency(from);
final toCurrency = _normalizeCryptoCurrency(to);
final url = apiBaseUrl + rangePath + '/' + fromCurrency + '/' + toCurrency;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
if (response.statusCode == 500) {
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -181,7 +188,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -192,9 +199,10 @@ class SideShiftExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> findTradeById({@required String id}) async {
Future<Trade> findTradeById({required String id}) async {
final url = apiBaseUrl + orderPath + '/' + id;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
if (response.statusCode == 404) {
throw TradeNotFoundException(id, provider: description);
@@ -209,7 +217,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -219,8 +227,8 @@ class SideShiftExchangeProvider extends ExchangeProvider {
final to = CryptoCurrency.fromString(toCurrency);
final inputAddress = responseJSON['depositAddress']['address'] as String;
final expectedSendAmount = responseJSON['depositAmount'].toString();
final deposits = responseJSON['deposits'] as List;
TradeState state;
final deposits = responseJSON['deposits'] as List?;
TradeState? state;
if (deposits != null && deposits.isNotEmpty) {
final status = deposits[0]['status'] as String;
@@ -259,7 +267,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
case CryptoCurrency.zec:
return 'zec';
case CryptoCurrency.bnb:
return currency.tag.toLowerCase();
return currency.tag!.toLowerCase();
case CryptoCurrency.usdterc20:
return 'usdtErc20';
default:
@@ -2,16 +2,16 @@ import 'package:cake_wallet/exchange/trade_request.dart';
import 'package:cw_core/crypto_currency.dart';
class SideShiftRequest extends TradeRequest {
SideShiftRequest(
{required this.depositMethod,
required this.settleMethod,
required this.depositAmount,
required this.settleAddress,
required this.refundAddress});
final CryptoCurrency depositMethod;
final CryptoCurrency settleMethod;
final String depositAmount;
final String settleAddress;
final String refundAddress;
SideShiftRequest(
{this.depositMethod,
this.settleMethod,
this.depositAmount,
this.settleAddress,
this.refundAddress,});
}
@@ -1,5 +1,4 @@
import 'dart:convert';
import 'package:cake_wallet/exchange/exchange_pair.dart';
import 'package:cake_wallet/exchange/exchange_provider.dart';
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
@@ -36,7 +35,11 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
@override
Future<double> calculateAmount(
{CryptoCurrency from, CryptoCurrency to, double amount, bool isFixedRateMode, bool isReceiveAmount}) async {
{required CryptoCurrency from,
required CryptoCurrency to,
required double amount,
required bool isFixedRateMode,
required bool isReceiveAmount}) async {
try {
if (amount == 0) {
return 0.0;
@@ -51,7 +54,6 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
'fixed': isFixedRateMode.toString()
};
final uri = Uri.https(apiAuthority, getEstimatePath, params);
final response = await get(uri);
if (response.body == null) return 0.00;
@@ -68,11 +70,11 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
final uri = Uri.https(apiAuthority, getEstimatePath, <String, String>{'api_key': apiKey});
final response = await get(uri);
return !(response.statusCode == 403);
return !(response.statusCode == 403);
}
@override
Future<Trade> createTrade({TradeRequest request, bool isFixedRateMode}) async {
Future<Trade> createTrade({required TradeRequest request, required bool isFixedRateMode}) async {
final _request = request as SimpleSwapRequest;
final headers = {
'Content-Type': 'application/json'};
@@ -121,7 +123,10 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
}
@override
Future<Limits> fetchLimits({CryptoCurrency from, CryptoCurrency to, bool isFixedRateMode}) async {
Future<Limits> fetchLimits({
required CryptoCurrency from,
required CryptoCurrency to,
required bool isFixedRateMode}) async {
final fromCurrency = _normalizeCryptoCurrency(from);
final toCurrency = _normalizeCryptoCurrency(to);
final params = <String, dynamic>{
@@ -142,7 +147,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -153,7 +158,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> findTradeById({String id}) async {
Future<Trade> findTradeById({required String id}) async {
final params = {'api_key': apiKey, 'id': id};
final uri = Uri.https(apiAuthority, getExchangePath, params);
final response = await get(uri);
@@ -170,7 +175,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
}
if (response.statusCode != 200) {
return null;
throw Exception('Unexpected http status: ${response.statusCode}');
}
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -210,7 +215,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
case CryptoCurrency.zec:
return 'zec';
case CryptoCurrency.bnb:
return currency.tag.toLowerCase();
return currency.tag!.toLowerCase();
case CryptoCurrency.usdterc20:
return 'usdterc';
default:
@@ -4,11 +4,12 @@ import 'package:flutter/material.dart';
class SimpleSwapRequest extends TradeRequest {
SimpleSwapRequest({
@required this.from,
@required this.to,
@required this.address,
@required this.amount,
@required this.refundAddress,
required this.from,
required this.to,
required this.address,
required this.amount,
required this.refundAddress,
this.toAmount = ''
});
CryptoCurrency from;
+33 -24
View File
@@ -9,23 +9,32 @@ part 'trade.g.dart';
@HiveType(typeId: Trade.typeId)
class Trade extends HiveObject {
Trade(
{this.id,
ExchangeProviderDescription provider,
CryptoCurrency from,
CryptoCurrency to,
TradeState state,
{required this.id,
required this.amount,
ExchangeProviderDescription? provider,
CryptoCurrency? from,
CryptoCurrency? to,
TradeState? state,
this.createdAt,
this.expiredAt,
this.amount,
this.inputAddress,
this.extraId,
this.outputTransaction,
this.refundAddress,
this.walletId})
: providerRaw = provider?.raw,
fromRaw = from?.raw,
toRaw = to?.raw,
stateRaw = state?.raw;
this.walletId}) {
if (provider != null) {
providerRaw = provider.raw;
}
if (from != null) {
fromRaw = from.raw;
}
if (to != null) {
toRaw = to.raw;
}
if (state != null) {
stateRaw = state.raw;
}
}
static const typeId = 3;
static const boxName = 'Trades';
@@ -35,51 +44,51 @@ class Trade extends HiveObject {
String id;
@HiveField(1)
int providerRaw;
late int providerRaw;
ExchangeProviderDescription get provider =>
ExchangeProviderDescription.deserialize(raw: providerRaw);
@HiveField(2)
int fromRaw;
late int fromRaw;
CryptoCurrency get from => CryptoCurrency.deserialize(raw: fromRaw);
@HiveField(3)
int toRaw;
late int toRaw;
CryptoCurrency get to => CryptoCurrency.deserialize(raw: toRaw);
@HiveField(4)
String stateRaw;
late String stateRaw;
TradeState get state => TradeState.deserialize(raw: stateRaw);
@HiveField(5)
DateTime createdAt;
DateTime? createdAt;
@HiveField(6)
DateTime expiredAt;
DateTime? expiredAt;
@HiveField(7)
String amount;
@HiveField(8)
String inputAddress;
String? inputAddress;
@HiveField(9)
String extraId;
String? extraId;
@HiveField(10)
String outputTransaction;
String? outputTransaction;
@HiveField(11)
String refundAddress;
String? refundAddress;
@HiveField(12)
String walletId;
String? walletId;
static Trade fromMap(Map map) {
static Trade fromMap(Map<String, Object?> map) {
return Trade(
id: map['id'] as String,
provider: ExchangeProviderDescription.deserialize(
@@ -99,7 +108,7 @@ class Trade extends HiveObject {
'provider': provider.serialize(),
'input': from.serialize(),
'output': to.serialize(),
'date': createdAt != null ? createdAt.millisecondsSinceEpoch : null,
'date': createdAt != null ? createdAt!.millisecondsSinceEpoch : null,
'amount': amount,
'wallet_id': walletId
};
+3 -3
View File
@@ -4,14 +4,14 @@ import 'package:cake_wallet/generated/i18n.dart';
class TradeNotFoundException implements Exception {
TradeNotFoundException(this.tradeId, {this.provider, this.description = ''});
String tradeId;
ExchangeProviderDescription provider;
String? tradeId;
ExchangeProviderDescription? provider;
String description;
@override
String toString() {
var text = tradeId != null && provider != null
? S.current.trade_id_not_found(tradeId, provider.title)
? S.current.trade_id_not_found(tradeId!, provider!.title)
: S.current.trade_not_found;
text += ' $description';
+3 -3
View File
@@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:cw_core/enumerable_item.dart';
class TradeState extends EnumerableItem<String> with Serializable<String> {
const TradeState({@required String raw, @required String title})
const TradeState({required String raw, required String title})
: super(raw: raw, title: title);
@override
@@ -35,7 +35,7 @@ class TradeState extends EnumerableItem<String> with Serializable<String> {
static const completed = TradeState(raw: 'completed', title: 'Completed');
static const settling = TradeState(raw: 'settling', title: 'Settlement in progress');
static const settled = TradeState(raw: 'settled', title: 'Settlement completed');
static TradeState deserialize({String raw}) {
static TradeState deserialize({required String raw}) {
switch (raw) {
case 'pending':
return pending;
@@ -78,7 +78,7 @@ class TradeState extends EnumerableItem<String> with Serializable<String> {
case 'completed':
return completed;
default:
return null;
throw Exception('Unexpected token: $raw in TradeState deserialize');
}
}
+23 -18
View File
@@ -34,7 +34,8 @@ class XMRTOExchangeProvider extends ExchangeProvider {
static Future<bool> _checkIsAvailable() async {
const url = originalApiUri + _orderParameterUriSuffix;
final response = await get(url, headers: _headers);
final uri = Uri.parse(url);
final response = await get(uri, headers: _headers);
return !(response.statusCode == 403);
}
@@ -61,9 +62,13 @@ class XMRTOExchangeProvider extends ExchangeProvider {
}
@override
Future<Limits> fetchLimits({CryptoCurrency from, CryptoCurrency to, bool isFixedRateMode}) async {
Future<Limits> fetchLimits({
required CryptoCurrency from,
required CryptoCurrency to,
required bool isFixedRateMode}) async {
final url = originalApiUri + _orderParameterUriSuffix;
final response = await get(url);
final uri = Uri.parse(url);
final response = await get(uri);
final correction = 0.001;
if (response.statusCode != 200) {
@@ -94,16 +99,14 @@ class XMRTOExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> createTrade({TradeRequest request, bool isFixedRateMode}) async {
Future<Trade> createTrade({required TradeRequest request, required bool isFixedRateMode}) async {
final _request = request as XMRTOTradeRequest;
final url = originalApiUri + _orderCreateUriSuffix;
final _amount =
_request.isBTCRequest ? _request.receiveAmount : _request.amount;
final _amountCurrency = _request.isBTCRequest
? _request.to.toString()
: _request.from.toString();
final pattern = '^([0-9]+([.\,][0-9]{0,8})?|[.\,][0-9]{1,8})\$';
final isValid = RegExp(pattern).hasMatch(_amount);
@@ -115,10 +118,10 @@ class XMRTOExchangeProvider extends ExchangeProvider {
final body = {
'amount': _amount,
'amount_currency': _amountCurrency,
'btc_dest_address': _request.address
};
'btc_dest_address': _request.address};
final uri = Uri.parse(url);
final response =
await post(url, headers: _headers, body: json.encode(body));
await post(uri, headers: _headers, body: json.encode(body));
if (response.statusCode != 201) {
if (response.statusCode == 400) {
@@ -145,11 +148,12 @@ class XMRTOExchangeProvider extends ExchangeProvider {
}
@override
Future<Trade> findTradeById({@required String id}) async {
Future<Trade> findTradeById({required String id}) async {
final url = originalApiUri + _orderStatusUriSuffix;
final uri = Uri.parse(url);
final body = {'uuid': id};
final response =
await post(url, headers: _headers, body: json.encode(body));
await post(uri, headers: _headers, body: json.encode(body));
if (response.statusCode != 200) {
if (response.statusCode == 400) {
@@ -188,16 +192,16 @@ class XMRTOExchangeProvider extends ExchangeProvider {
@override
Future<double> calculateAmount(
{CryptoCurrency from,
CryptoCurrency to,
double amount,
bool isFixedRateMode,
bool isReceiveAmount}) async {
{required CryptoCurrency from,
required CryptoCurrency to,
required double amount,
required bool isFixedRateMode,
required bool isReceiveAmount}) async {
if (from != CryptoCurrency.xmr && to != CryptoCurrency.btc) {
return 0;
}
if (_rate == null || _rate == 0) {
if (_rate == 0) {
_rate = await _fetchRates();
}
@@ -213,7 +217,8 @@ class XMRTOExchangeProvider extends ExchangeProvider {
Future<double> _fetchRates() async {
try {
final url = originalApiUri + _orderParameterUriSuffix;
final response = await get(url, headers: _headers);
final uri = Uri.parse(url);
final response = await get(uri, headers: _headers);
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
final price = double.parse(responseJSON['price'] as String);
+7 -7
View File
@@ -4,13 +4,13 @@ import 'package:cake_wallet/exchange/trade_request.dart';
class XMRTOTradeRequest extends TradeRequest {
XMRTOTradeRequest(
{@required this.from,
@required this.to,
@required this.amount,
@required this.receiveAmount,
@required this.address,
@required this.refundAddress,
@required this.isBTCRequest});
{required this.from,
required this.to,
required this.amount,
required this.receiveAmount,
required this.address,
required this.refundAddress,
required this.isBTCRequest});
final CryptoCurrency from;
final CryptoCurrency to;