Skip to content
This repository was archived by the owner on Jun 2, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,8 @@ SELENDRA_API=
DOERS_API=
# For Image
IPFS_API=

# Exolix
EXOLIX_URL=
EXOLIX_API=
EXOLIX_TOKEN=
35 changes: 35 additions & 0 deletions lib/data/api/get_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,39 @@ class GetRequest {
});
}

/*--------------- EXOLIX API FUNCTION ---------------*/
static Future<http.Response> getExolixExStatusByTxId(String id) async {
var url = dotenv.get('EXOLIX_URL');
var api = dotenv.get('EXOLIX_API');
var uri = Uri.parse("$url/$api/transactions/$id");

return await http.get(
uri,
headers: conceteHeader()
);
}

static Future<http.Response> getExolixExchangeCoin() async {
var url = dotenv.get('EXOLIX_URL');
var api = dotenv.get('EXOLIX_API');
var uri = Uri.parse("$url/$api/currencies?all=true&withNetworks=true&networksList=BTC,BSC,ETH");

return await http.get(
uri,
headers: conceteHeader()
);
}

Future<http.Response> exolixTwoCoinInfo(Map<String, dynamic> queryParameters) async {
var url = dotenv.get('EXOLIX_URL');
var api = dotenv.get('EXOLIX_API');
var token = dotenv.get('EXOLIX_TOKEN');
queryParameters.addAll({ 'apiToken': token });
var uri = Uri.parse("$url/$api/rate").replace(queryParameters: queryParameters);

return await http.get(
uri,
headers: conceteHeader()
);
}
}
14 changes: 14 additions & 0 deletions lib/data/api/post_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,18 @@ class PostRequest {
);
// return http.Response(json.encode(data), 200);
}

Future<http.Response> exolixSwap(Map<String, dynamic> mapData) async {

var url = dotenv.get('EXOLIX_URL');
var api = dotenv.get('EXOLIX_API');
var token = dotenv.get('EXOLIX_TOKEN');
var uri = Uri.parse("$url/$api/transactions");

return await http.post(
uri,
body: json.encode(mapData),
headers: conceteHeader(key: "Authorization", value: "Bearer $token")
);
}
}
9 changes: 9 additions & 0 deletions lib/data/repository/exolix_ex_repo/exolix_ex_repo.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import 'package:bitriel_wallet/domain/model/exolix_ex_coin_m.dart';
import 'package:bitriel_wallet/index.dart';

abstract class ExolixExchangeRepository {
Future<List<ExolixExchangeCoin>> getExolixExchangeCoin();
Future<Response> getExolixExStatusByTxId(String txId);
Future<Response> exolixTwoCoinInfo(Map<String, dynamic> jsn);
Future<Response> exolixSwap(Map<String, dynamic> mapData);
}
44 changes: 44 additions & 0 deletions lib/data/repository/exolix_ex_repo/exolix_ex_repo_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import 'package:bitriel_wallet/data/api/post_api.dart';
import 'package:bitriel_wallet/data/repository/exolix_ex_repo/exolix_ex_repo.dart';
import 'package:bitriel_wallet/domain/model/exolix_ex_coin_m.dart';
import 'package:bitriel_wallet/index.dart';

class ExolixExchangeRepoImpl implements ExolixExchangeRepository {

List<ExolixExchangeCoin> lstExoCoin = [];

@override
Future<List<ExolixExchangeCoin>> getExolixExchangeCoin() async {

await GetRequest.getExolixExchangeCoin().then((value) {

if (value.statusCode == 200) {

List<dynamic> json = jsonDecode(value.body)['data'];

for (dynamic jsonExoCoin in json){

lstExoCoin.add(ExolixExchangeCoin.fromJson(jsonExoCoin));
}
}
});

return lstExoCoin;

}

@override
Future<Response> exolixSwap(Map<String, dynamic> mapData) async {
return await PostRequest().exolixSwap(mapData);
}

@override
Future<Response> exolixTwoCoinInfo(Map<String, dynamic> jsn) async {
return await PostRequest().twoCoinInfo(jsn);
}

@override
Future<Response> getExolixExStatusByTxId(String txId) async {
return await GetRequest.getLetsExStatusByTxId(txId);
}
}
119 changes: 119 additions & 0 deletions lib/domain/model/exolix_ex_coin_m.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
// To parse this JSON data, do
//
// final exolixExchangeCoin = exolixExchangeCoinFromJson(jsonString);

import 'package:bitriel_wallet/index.dart';

class ExolixCoin {

String? coinCode;
String? coinName;
String? network;
String? networkName;
String? networkShortName;
String? icon;
String? memoName;

ExolixCoin({
this.coinCode,
this.coinName,
this.network,
this.networkName,
this.networkShortName,
this.icon,
this.memoName,
});

ExolixCoin.fromJson(Map<String, dynamic> jsn){
coinCode = jsn['coinCode'];
coinName = jsn['coinName'];
network = jsn['network'];
networkName = jsn['networkName'];
networkShortName = jsn['networkShortName'];
icon = jsn['icon'];
memoName = jsn['memoName'];
}

}

class ExolixExchangeCoin {

final String? code;
final String? icon;
final String? name;
final List<ExolixExchangeCoinNetwork>? networks;

ExolixExchangeCoin({
this.code,
this.icon,
this.name,
this.networks,
});

static String? exolixUrl = dotenv.get('EXOLIX_URL');

factory ExolixExchangeCoin.fromRawJson(String str) => ExolixExchangeCoin.fromJson(json.decode(str));

String toRawJson() => json.encode(toJson());

factory ExolixExchangeCoin.fromJson(Map<String, dynamic> json) => ExolixExchangeCoin(
code: json["code"],
icon: exolixUrl! + json["icon"],
name: json["name"],
networks: json["networks"] == null ? [] : List<ExolixExchangeCoinNetwork>.from(json["networks"]!.map((x) => ExolixExchangeCoinNetwork.fromJson(x))),
);

Map<String, dynamic> toJson() => {
"code": code,
"icon": icon,
"name": name,
"networks": networks == null ? [] : List<dynamic>.from(networks!.map((x) => x.toJson())),
};
}

class ExolixExCoinByNetworkModel {

bool? isActive = false;
String? title = '';
String? networkCode = '';
String? subtitle = '';
String? balance = '';
String? network = '';
Widget? image = const SizedBox();

ExolixExCoinByNetworkModel({this.networkCode, this.image, this.title, this.subtitle, this.balance, this.network, this.isActive});
}

class ExolixExchangeCoinNetwork {

final String? name;
final String? network;
final String? blockExplorer;
final String? shortName;

ExolixExchangeCoinNetwork({
this.name,
this.network,
this.blockExplorer,
this.shortName,
});

factory ExolixExchangeCoinNetwork.fromRawJson(String str) => ExolixExchangeCoinNetwork.fromJson(json.decode(str));

String toRawJson() => json.encode(toJson());

factory ExolixExchangeCoinNetwork.fromJson(Map<String, dynamic> json) => ExolixExchangeCoinNetwork(
name: json["name"],
network: json["network"],
blockExplorer: json["blockExplorer"],
shortName: json["shortName"],
);

Map<String, dynamic> toJson() => {
"name": name,
"network": network,
"blockExplorer": blockExplorer,
"shortName": shortName,
};

}
102 changes: 101 additions & 1 deletion lib/domain/model/swap_m.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:bitriel_wallet/domain/model/exolix_ex_coin_m.dart';
import 'package:bitriel_wallet/index.dart';

class SwapModel {
Expand Down Expand Up @@ -36,6 +37,37 @@ class SwapModel {
}
}

class ExolixSwapModel {

String? coinFrom;
String? coinTo;
String? networkFrom;
String? networkTo;
String? withdrawalAddress;
ValueNotifier<String>? amt;

ExolixSwapModel(){
coinFrom = "";
coinTo = "";
networkFrom = "";
networkTo = "";
amt = ValueNotifier("");
}

// Return Encode Json
Map<String, dynamic> toJson(){

return {
"coinFrom": coinFrom,
"coinTo": coinTo,
"networkFrom": networkFrom,
"networkTo": networkTo,
"amount": amt!.value,
"withdrawalAddress": withdrawalAddress,
};
}
}

class SwapResModel {

bool? is_float;
Expand Down Expand Up @@ -125,7 +157,7 @@ class SwapResModel {

List<Map<String, dynamic>> toJson(List<SwapResModel?> lstSwapRes){

return lstSwapRes!.map((e) => {
return lstSwapRes.map((e) => {
'is_float': e!.is_float,
'status': e.status,
'coin_from': e.coin_from,
Expand Down Expand Up @@ -167,4 +199,72 @@ class SwapResModel {

}

}

class ExolixSwapResModel {

String? id;
String? amount;
String? amountTo;
ExolixCoin? coinFrom;
ExolixCoin? coinTo;
String? comment;
String? createdAt;
String? depositAddress;
String? depositExtraId;
String? withdrawalAddress;
String? withdrawalExtraId;
String? refundAddress;
String? refundExtraId;
dynamic rate;
String? rateType;
String? status;
String? email;

ExolixSwapResModel();

ExolixSwapResModel.fromJson(Map<String, dynamic> jsn){
id = jsn['id'];
status = jsn['status'];
coinFrom = ExolixCoin.fromJson(jsn['coinFrom']);
coinTo = ExolixCoin.fromJson(jsn['coinTo']);
comment = jsn['comment'];
createdAt = jsn['createdAt'];
amount = jsn['amount'].toString();
amountTo = jsn['amountTo'].toString();
depositAddress = jsn['depositAddress'];
depositExtraId = jsn['depositExtraId'];
withdrawalAddress = jsn['withdrawalAddress'];
withdrawalExtraId = jsn['withdrawalExtraId'];
refundAddress = jsn['refundAddress'];
refundExtraId = jsn['refundExtraId'];
rate = jsn['rate'];
rateType = jsn['rateType'];
email = jsn['email'];
}

List<Map<String, dynamic>> toJson(List<ExolixSwapResModel?> lstSwapRes){

return lstSwapRes.map((e) => {
"id": e!.id,
"status": e.status,
"coinFrom": e.coinFrom,
"coinTo": e.coinTo,
"comment": e.comment,
"createdAt": e.createdAt,
"amount": e.amount,
"amountTo": e.amountTo,
"depositAddress": e.depositAddress,
"depositExtraId": e.depositExtraId,
"withdrawalAddress": e.withdrawalAddress,
"withdrawalExtraId": e.withdrawalExtraId,
"refundAddress": e.refundAddress,
"refundExtraId": e.refundExtraId,
"rate": e.rate,
"rateType": e.rateType,
"email": e.email,
}).toList();

}

}
6 changes: 3 additions & 3 deletions lib/domain/usecases/app_uc/app_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class AppUsecasesImpl implements AppUsecases {
if(value == true) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => const MainScreen()),
MaterialPageRoute(builder: (context) => MainScreen()),
(route) => false
);
}
Expand Down Expand Up @@ -125,12 +125,12 @@ class AppUsecasesImpl implements AppUsecases {

if (sdkProvider!.getSdkImpl.getKeyring.allAccounts.isNotEmpty){
await Future.delayed(const Duration(milliseconds: 200), (){

Navigator.pushAndRemoveUntil(
_context!,
MaterialPageRoute(builder: (context) => const MainScreen()),
MaterialPageRoute(builder: (context) => MainScreen()),
(route) => false
);

});
} else {

Expand Down
Loading