change all api from http to dio
This commit is contained in:
@ -3,18 +3,28 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
// import 'dart:convert';
|
||||
// import 'dart:io';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:get/get.dart';
|
||||
// import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
// import 'package:http/http.dart' as http;
|
||||
import 'package:logger/logger.dart';
|
||||
import '../globals.dart' as globals;
|
||||
|
||||
class BeforeLoginApi extends GetxController {
|
||||
class BeforeLoginApi {
|
||||
static final log = Logger();
|
||||
static var storage = GetStorage();
|
||||
|
||||
static var options = BaseOptions(
|
||||
// baseUrl: 'https://www.xx.com/api',
|
||||
connectTimeout: 5000,
|
||||
receiveTimeout: 5000,
|
||||
);
|
||||
Dio dio = Dio(options);
|
||||
|
||||
Future<Map<String, dynamic>> sign_up_kurir(Map data, String fotoKTP,
|
||||
String fotoHoldingKTP, String fotoKendaraan, String fotoProfil) async {
|
||||
Map<String, dynamic> result;
|
||||
@ -27,24 +37,44 @@ class BeforeLoginApi extends GetxController {
|
||||
status: 'Melakukan\nPendaftaran...',
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
var postUri = Uri.parse('${globals.http_to_server}api/login/daftar1');
|
||||
var request = http.MultipartRequest("POST", postUri);
|
||||
request.fields['data'] = jsonEncode(data);
|
||||
request.files
|
||||
.add(await http.MultipartFile.fromPath('ktp_photo', fotoKTP));
|
||||
request.files.add(await http.MultipartFile.fromPath(
|
||||
'ktp_holding_photo', fotoHoldingKTP));
|
||||
request.files.add(await http.MultipartFile.fromPath(
|
||||
'kenderaan_photo', fotoKendaraan));
|
||||
request.files
|
||||
.add(await http.MultipartFile.fromPath('photo', fotoProfil));
|
||||
// var postUri = Uri.parse('${globals.http_to_server}api/login/daftar1');
|
||||
// var request = http.MultipartRequest("POST", postUri);
|
||||
// request.fields['data'] = jsonEncode(data);
|
||||
// request.files
|
||||
// .add(await http.MultipartFile.fromPath('ktp_photo', fotoKTP));
|
||||
// request.files.add(await http.MultipartFile.fromPath(
|
||||
// 'ktp_holding_photo', fotoHoldingKTP));
|
||||
// request.files.add(await http.MultipartFile.fromPath(
|
||||
// 'kenderaan_photo', fotoKendaraan));
|
||||
// request.files
|
||||
// .add(await http.MultipartFile.fromPath('photo', fotoProfil));
|
||||
|
||||
var streamResponse =
|
||||
await request.send().timeout(const Duration(seconds: 120));
|
||||
// var streamResponse = await request.send();
|
||||
var response = await http.Response.fromStream(streamResponse);
|
||||
// var streamResponse =
|
||||
// await request.send().timeout(const Duration(seconds: 120));
|
||||
// // var streamResponse = await request.send();
|
||||
// var response = await http.Response.fromStream(streamResponse);
|
||||
|
||||
final datanya = jsonDecode(response.body);
|
||||
// final datanya = jsonDecode(response.body);
|
||||
|
||||
var formData = FormData.fromMap({
|
||||
'data': jsonEncode(data),
|
||||
'ktp_photo': await MultipartFile.fromFile(fotoKTP),
|
||||
'ktp_holding_photo': await MultipartFile.fromFile(fotoHoldingKTP),
|
||||
'kenderaan_photo': await MultipartFile.fromFile(fotoKendaraan),
|
||||
'photo': await MultipartFile.fromFile(fotoProfil),
|
||||
});
|
||||
|
||||
var response = await dio.post(
|
||||
'${globals.http_to_server}api/login/daftar1',
|
||||
data: formData,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
var datanya = response.data;
|
||||
|
||||
log.i(response.statusCode.toString() + " ini status code");
|
||||
log.i(datanya.toString());
|
||||
@ -116,17 +146,36 @@ class BeforeLoginApi extends GetxController {
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
|
||||
var postUri = Uri.parse('${globals.http_to_server}api/login/daftar1');
|
||||
var request = http.MultipartRequest("POST", postUri);
|
||||
request.fields['data'] = jsonEncode(data);
|
||||
// var postUri = Uri.parse('${globals.http_to_server}api/login/daftar1');
|
||||
// var request = http.MultipartRequest("POST", postUri);
|
||||
// request.fields['data'] = jsonEncode(data);
|
||||
|
||||
request.files
|
||||
.add(await http.MultipartFile.fromPath('photo', fotoProfil));
|
||||
// request.files
|
||||
// .add(await http.MultipartFile.fromPath('photo', fotoProfil));
|
||||
|
||||
var streamResponse =
|
||||
await request.send().timeout(const Duration(seconds: 60));
|
||||
// var streamResponse = await request.send();
|
||||
var response = await http.Response.fromStream(streamResponse);
|
||||
// var streamResponse =
|
||||
// await request.send().timeout(const Duration(seconds: 60));
|
||||
// // var streamResponse = await request.send();
|
||||
// var response = await http.Response.fromStream(streamResponse);
|
||||
|
||||
// var datanya = jsonDecode(response.body);
|
||||
|
||||
var formData = FormData.fromMap({
|
||||
'data': jsonEncode(data),
|
||||
'photo': await MultipartFile.fromFile(fotoProfil),
|
||||
});
|
||||
|
||||
var response = await dio.post(
|
||||
'${globals.http_to_server}api/login/daftar1',
|
||||
data: formData,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
var datanya = response.data;
|
||||
|
||||
// final form = FormData({
|
||||
// 'photo': MultipartFile(File(fotoProfil).readAsBytesSync(),
|
||||
@ -137,8 +186,6 @@ class BeforeLoginApi extends GetxController {
|
||||
// final response =
|
||||
// await post('${globals.http_to_server}api/login/daftar1', form);
|
||||
|
||||
var datanya = jsonDecode(response.body);
|
||||
|
||||
log.i(response.statusCode.toString() + " ini status code");
|
||||
log.i(datanya.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -212,14 +259,26 @@ class BeforeLoginApi extends GetxController {
|
||||
|
||||
// var _response = await get(
|
||||
// '${globals.http_to_server}api/login?username=$username&password=$password&role=$role');
|
||||
var uri = Uri.parse(
|
||||
'${globals.http_to_server}api/login?username=$username&password=$password&role=$role');
|
||||
var _response = await http.get(uri, headers: {
|
||||
'Content-Type': 'application/json',
|
||||
"crossDomain": "true",
|
||||
}).timeout(const Duration(seconds: 15));
|
||||
// var uri = Uri.parse(
|
||||
// '${globals.http_to_server}api/login?username=$username&password=$password&role=$role');
|
||||
// var _response = await http.get(uri, headers: {
|
||||
// 'Content-Type': 'application/json',
|
||||
// "crossDomain": "true",
|
||||
// }).timeout(const Duration(seconds: 15));
|
||||
|
||||
var _data = jsonDecode(_response.body);
|
||||
// var _data = jsonDecode(_response.body);
|
||||
|
||||
var _response = await dio.get(
|
||||
'${globals.http_to_server}api/login?username=$username&password=$password&role=$role',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
"crossDomain": "true",
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
var _data = _response.data;
|
||||
|
||||
log.i(_response.statusCode.toString() + " ini status code");
|
||||
log.i(_data['data']['_idnya'].toString() + " ini id");
|
||||
@ -294,13 +353,25 @@ class BeforeLoginApi extends GetxController {
|
||||
);
|
||||
|
||||
try {
|
||||
var response =
|
||||
await http.get(Uri.parse("${globals.http_to_server}api"), headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
// var response =
|
||||
// await http.get(Uri.parse("${globals.http_to_server}api"), headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
|
||||
var response = await dio.get(
|
||||
'${globals.http_to_server}api',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
),
|
||||
);
|
||||
// final data = jsonDecode(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
result = true;
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
// ignore_for_file: file_names
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
// import 'dart:convert';
|
||||
|
||||
import 'dart:io';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
// import 'package:http/http.dart' as http;
|
||||
import 'package:logger/logger.dart';
|
||||
import '../globals.dart' as globals;
|
||||
|
||||
@ -20,6 +21,13 @@ class KurirApi extends GetxController {
|
||||
static var password = storage.read("password");
|
||||
static var id = storage.read("id");
|
||||
|
||||
static var options = BaseOptions(
|
||||
// baseUrl: 'https://www.xx.com/api',
|
||||
connectTimeout: 10000,
|
||||
receiveTimeout: 10000,
|
||||
);
|
||||
Dio dio = Dio(options);
|
||||
|
||||
// get all pengiriman status ='Dalam Pengesahan Kurir'
|
||||
Future<Map<String, dynamic>> getAllPengirimanDalamPengesahanKurir() async {
|
||||
late Map<String, dynamic> result;
|
||||
@ -33,16 +41,27 @@ class KurirApi extends GetxController {
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/pengiriman_kurir_dalam_pengesahan?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/pengiriman_kurir_dalam_pengesahan?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/kurir/pengiriman_kurir_dalam_pengesahan?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
));
|
||||
|
||||
final data = response.data;
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -105,16 +124,27 @@ class KurirApi extends GetxController {
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/pengiriman_completed?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/pengiriman_completed?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/kurir/pengiriman_completed?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
));
|
||||
|
||||
final data = response.data;
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -177,16 +207,27 @@ class KurirApi extends GetxController {
|
||||
);
|
||||
|
||||
try {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/pengaturan?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/pengaturan?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/kurir/pengaturan?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
));
|
||||
|
||||
final data = response.data;
|
||||
if (response.statusCode == 200) {
|
||||
result = {
|
||||
'status': 200,
|
||||
@ -251,21 +292,38 @@ class KurirApi extends GetxController {
|
||||
status: 'Loading...',
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
var response = await http.post(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/pengaturan?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
body: {
|
||||
// var response = await http.post(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/pengaturan?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// },
|
||||
// body: {
|
||||
// "minimal_biaya_pengiriman": minimalBiaya,
|
||||
// "maksimal_biaya_pengiriman": maksimalBiaya,
|
||||
// "biaya_per_kilo": biayaPerKilo
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
// final data = jsonDecode(response.body);
|
||||
var response = await dio.post(
|
||||
"${globals.http_to_server}api/kurir/pengaturan?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
),
|
||||
data: {
|
||||
"minimal_biaya_pengiriman": minimalBiaya,
|
||||
"maksimal_biaya_pengiriman": maksimalBiaya,
|
||||
"biaya_per_kilo": biayaPerKilo
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
});
|
||||
final data = response.data;
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
result = {'status': 200, 'message': data['message'], 'data': data};
|
||||
} else {
|
||||
@ -321,19 +379,32 @@ class KurirApi extends GetxController {
|
||||
|
||||
if (_checkServer) {
|
||||
try {
|
||||
var response = await http.post(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/sahkan_pengiriman?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
body: {
|
||||
"id_pengiriman": idPengiriman
|
||||
}).timeout(const Duration(seconds: 60));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.post(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/sahkan_pengiriman?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// },
|
||||
// body: {
|
||||
// "id_pengiriman": idPengiriman
|
||||
// }).timeout(const Duration(seconds: 60));
|
||||
// final data = jsonDecode(response.body);
|
||||
var response = await dio.post(
|
||||
"${globals.http_to_server}api/kurir/sahkan_pengiriman?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
),
|
||||
data: {"id_pengiriman": idPengiriman});
|
||||
final data = response.data;
|
||||
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -394,16 +465,29 @@ class KurirApi extends GetxController {
|
||||
|
||||
if (_checkServer) {
|
||||
try {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/detail_pengiriman?username=$username&password=$password&id=$id&id_pengiriman=$idPengiriman"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 60));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/detail_pengiriman?username=$username&password=$password&id=$id&id_pengiriman=$idPengiriman"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 60));
|
||||
// final data = jsonDecode(response.body);
|
||||
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/kurir/detail_pengiriman?username=$username&password=$password&id=$id&id_pengiriman=$idPengiriman",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
));
|
||||
|
||||
final data = response.data;
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -465,19 +549,31 @@ class KurirApi extends GetxController {
|
||||
|
||||
if (_checkServer) {
|
||||
try {
|
||||
var response = await http.post(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/mengambil_paket_pengiriman?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
body: {
|
||||
"id_pengiriman": idPengiriman
|
||||
}).timeout(const Duration(seconds: 60));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.post(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/mengambil_paket_pengiriman?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// },
|
||||
// body: {
|
||||
// "id_pengiriman": idPengiriman
|
||||
// }).timeout(const Duration(seconds: 60));
|
||||
// final data = jsonDecode(response.body);
|
||||
var response = await dio.post(
|
||||
"${globals.http_to_server}api/kurir/mengambil_paket_pengiriman?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
),
|
||||
data: {"id_pengiriman": idPengiriman});
|
||||
final data = response.data;
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -543,13 +639,22 @@ class KurirApi extends GetxController {
|
||||
);
|
||||
|
||||
try {
|
||||
var response =
|
||||
await http.get(Uri.parse("${globals.http_to_server}api"), headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
// var response =
|
||||
// await http.get(Uri.parse("${globals.http_to_server}api"), headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
var response = await dio.get("${globals.http_to_server}api",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
));
|
||||
// final data = jsonDecode(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
result = true;
|
||||
@ -581,17 +686,28 @@ class KurirApi extends GetxController {
|
||||
|
||||
if (_checkServer) {
|
||||
try {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/kurir/profil_kurir?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/kurir/profil_kurir?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
|
||||
final data = jsonDecode(response.body);
|
||||
// final data = jsonDecode(response.body);
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/kurir/profil_kurir?username=$username&password=$password&id=$id",
|
||||
options: Options(
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
},
|
||||
));
|
||||
final data = response.data;
|
||||
dev.i(data);
|
||||
if (response.statusCode == 200) {
|
||||
result = {
|
||||
|
||||
@ -4,14 +4,15 @@ import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:get/get.dart';
|
||||
// import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
// import 'package:http/http.dart' as http;
|
||||
import 'package:logger/logger.dart';
|
||||
import '../globals.dart' as globals;
|
||||
|
||||
class PengirimApi extends GetxController {
|
||||
class PengirimApi {
|
||||
static var storage = GetStorage();
|
||||
|
||||
static var username = storage.read("username");
|
||||
@ -20,6 +21,13 @@ class PengirimApi extends GetxController {
|
||||
|
||||
final log = Logger();
|
||||
|
||||
static var options = BaseOptions(
|
||||
// baseUrl: 'https://www.xx.com/api',
|
||||
connectTimeout: 5000,
|
||||
receiveTimeout: 5000,
|
||||
);
|
||||
Dio dio = Dio(options);
|
||||
|
||||
// get all kurir
|
||||
Future<Map<String, dynamic>> getAllKurir() async {
|
||||
late Map<String, dynamic> result;
|
||||
@ -32,16 +40,21 @@ class PengirimApi extends GetxController {
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
try {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/pengirim/kurir?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/pengirim/kurir?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
// final data = jsonDecode(response.body);
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/pengirim/kurir?username=$username&password=$password&id=$id");
|
||||
|
||||
var data = response.data;
|
||||
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -113,16 +126,20 @@ class PengirimApi extends GetxController {
|
||||
status: 'Loading...',
|
||||
maskType: EasyLoadingMaskType.black,
|
||||
);
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/pengirim/kurir/nama?nama=$nama&username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/pengirim/kurir/nama?nama=$nama&username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
// final data = jsonDecode(response.body);
|
||||
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/pengirim/kurir/nama?nama=$nama&username=$username&password=$password&id=$id");
|
||||
var data = response.data;
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -199,16 +216,20 @@ class PengirimApi extends GetxController {
|
||||
String _biayaMaksimal = biayaMaksimal?.toString() ?? "";
|
||||
String _biayaPerKm = biayaPerKm?.toString() ?? "";
|
||||
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/pengirim/kurir/filter?nama=$_nama&biaya_maksimal=$_biayaMaksimal&biaya_per_km=$_biayaPerKm&username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/pengirim/kurir/filter?nama=$_nama&biaya_maksimal=$_biayaMaksimal&biaya_per_km=$_biayaPerKm&username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
// final data = jsonDecode(response.body);
|
||||
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/pengirim/kurir/filter?nama=$_nama&biaya_maksimal=$_biayaMaksimal&biaya_per_km=$_biayaPerKm&username=$username&password=$password&id=$id");
|
||||
var data = response.data;
|
||||
// log(data.toString());
|
||||
// log("ini status : " + response.statusCode.toString());
|
||||
if (response.statusCode == 200) {
|
||||
@ -285,18 +306,28 @@ class PengirimApi extends GetxController {
|
||||
// log(foto_path.toString() + " ini datanya di pengiriman barang");
|
||||
// remove foto_path from _datanya
|
||||
_datanya.remove('foto_path');
|
||||
var postUri = Uri.parse(
|
||||
'${globals.http_to_server}api/pengirim/pengiriman_barang?username=$username&password=$password&id=$id');
|
||||
var request = http.MultipartRequest("POST", postUri);
|
||||
request.fields['data'] = jsonEncode(_datanya);
|
||||
request.files.add(
|
||||
await http.MultipartFile.fromPath('foto_pengiriman', foto_path));
|
||||
var streamResponse =
|
||||
await request.send().timeout(const Duration(seconds: 60));
|
||||
// var streamResponse = await request.send();
|
||||
var response = await http.Response.fromStream(streamResponse);
|
||||
// var postUri = Uri.parse(
|
||||
// '${globals.http_to_server}api/pengirim/pengiriman_barang?username=$username&password=$password&id=$id');
|
||||
// var request = http.MultipartRequest("POST", postUri);
|
||||
// request.fields['data'] = jsonEncode(_datanya);
|
||||
// request.files.add(
|
||||
// await http.MultipartFile.fromPath('foto_pengiriman', foto_path));
|
||||
// var streamResponse =
|
||||
// await request.send().timeout(const Duration(seconds: 60));
|
||||
// // var streamResponse = await request.send();
|
||||
// var response = await http.Response.fromStream(streamResponse);
|
||||
|
||||
var datanya = jsonDecode(response.body);
|
||||
// var datanya = jsonDecode(response.body);
|
||||
var formData = FormData.fromMap({
|
||||
"data": jsonEncode(_datanya),
|
||||
"foto_pengiriman": await MultipartFile.fromFile(foto_path),
|
||||
});
|
||||
|
||||
var response = await dio.post(
|
||||
"${globals.http_to_server}api/pengirim/pengiriman_barang?username=$username&password=$password&id=$id",
|
||||
data: formData);
|
||||
|
||||
var datanya = response.data;
|
||||
|
||||
result = {
|
||||
'status': 200,
|
||||
@ -353,16 +384,21 @@ class PengirimApi extends GetxController {
|
||||
|
||||
if (_checkServer) {
|
||||
try {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"${globals.http_to_server}api/pengirim/log_kiriman?username=$username&password=$password&id=$id"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
final data = jsonDecode(response.body);
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "${globals.http_to_server}api/pengirim/log_kiriman?username=$username&password=$password&id=$id"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
// final data = jsonDecode(response.body);
|
||||
|
||||
var response = await dio.get(
|
||||
"${globals.http_to_server}api/pengirim/log_kiriman?username=$username&password=$password&id=$id");
|
||||
var data = response.data;
|
||||
|
||||
// log(data.toString());
|
||||
if (response.statusCode == 200) {
|
||||
result = {
|
||||
@ -421,18 +457,22 @@ class PengirimApi extends GetxController {
|
||||
double jarak = 0;
|
||||
|
||||
try {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
"https://maps.googleapis.com/maps/api/directions/json?origin=$lat1,$lng1&destination=$lat2,$lng2&key=${globals.api_key}"),
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
// var response = await http.get(
|
||||
// Uri.parse(
|
||||
// "https://maps.googleapis.com/maps/api/directions/json?origin=$lat1,$lng1&destination=$lat2,$lng2&key=${globals.api_key}"),
|
||||
// headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
|
||||
// log()
|
||||
final data = jsonDecode(response.body);
|
||||
// final data = jsonDecode(response.body);
|
||||
|
||||
var response = await dio.get(
|
||||
"https://maps.googleapis.com/maps/api/directions/json?origin=$lat1,$lng1&destination=$lat2,$lng2&key=${globals.api_key}");
|
||||
var data = response.data;
|
||||
|
||||
if (data["routes"].length > 0) {
|
||||
jarak = data["routes"][0]["legs"][0]["distance"]["value"] / 1000;
|
||||
@ -457,13 +497,15 @@ class PengirimApi extends GetxController {
|
||||
);
|
||||
|
||||
try {
|
||||
var response =
|
||||
await http.get(Uri.parse("${globals.http_to_server}api"), headers: {
|
||||
"Accept": "application/json",
|
||||
// "authorization":
|
||||
// "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
"crossDomain": "true"
|
||||
}).timeout(const Duration(seconds: 10));
|
||||
// var response =
|
||||
// await http.get(Uri.parse("${globals.http_to_server}api"), headers: {
|
||||
// "Accept": "application/json",
|
||||
// // "authorization":
|
||||
// // "Basic ${base64Encode(utf8.encode("Kicap_karan:bb10c6d9f01ec0cb16726b59e36c2f73"))}",
|
||||
// "crossDomain": "true"
|
||||
// }).timeout(const Duration(seconds: 10));
|
||||
|
||||
var response = await dio.get("${globals.http_to_server}api");
|
||||
// final data = jsonDecode(response.body);
|
||||
if (response.statusCode == 200) {
|
||||
result = true;
|
||||
|
||||
@ -201,7 +201,9 @@ class ProgressPenghantaranControllerKurir extends GetxController {
|
||||
|
||||
Future<void> onQRViewCreated(BuildContext context, String aksinya) async {
|
||||
Get.dialog(
|
||||
QRcodeScannerWidget(),
|
||||
QRcodeScannerWidget(
|
||||
title: aksinya,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -209,8 +211,11 @@ class ProgressPenghantaranControllerKurir extends GetxController {
|
||||
class QRcodeScannerWidget extends StatefulWidget {
|
||||
const QRcodeScannerWidget({
|
||||
Key? key,
|
||||
required this.title,
|
||||
}) : super(key: key);
|
||||
|
||||
final String title;
|
||||
|
||||
@override
|
||||
State<QRcodeScannerWidget> createState() => _QRcodeScannerWidgetState();
|
||||
}
|
||||
@ -225,8 +230,8 @@ class _QRcodeScannerWidgetState extends State<QRcodeScannerWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: Color.fromARGB(255, 199, 214, 234),
|
||||
title: const Text("Scan QRCode"),
|
||||
backgroundColor: const Color.fromARGB(255, 199, 214, 234),
|
||||
title: Text("Scan QRCode ${widget.title}"),
|
||||
content: SizedBox(
|
||||
width: 250, // custom wrap size
|
||||
height: 250,
|
||||
@ -243,17 +248,7 @@ class _QRcodeScannerWidgetState extends State<QRcodeScannerWidget> {
|
||||
setState(() {
|
||||
_isScanning = false;
|
||||
});
|
||||
Get.snackbar(
|
||||
"Success",
|
||||
"QRCode berhasil ditambahkan",
|
||||
snackPosition: SnackPosition.TOP,
|
||||
backgroundColor: Colors.green,
|
||||
borderRadius: 10,
|
||||
margin: EdgeInsets.all(10),
|
||||
borderColor: Colors.green,
|
||||
borderWidth: 2,
|
||||
duration: Duration(seconds: 2),
|
||||
);
|
||||
dev.i("scanner berhasil");
|
||||
} else {
|
||||
setState(() {
|
||||
_isScanning = false;
|
||||
|
||||
@ -43,7 +43,7 @@ void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
// await initializeService();
|
||||
// await Executor().warmUp(log: true);
|
||||
HttpOverrides.global = MyHttpOverrides();
|
||||
// HttpOverrides.global = MyHttpOverrides();
|
||||
await GetStorage.init();
|
||||
await _configureLocalTimeZone();
|
||||
// await Firebase.initializeApp(
|
||||
|
||||
@ -68,8 +68,7 @@ class _MainWidget extends StatelessWidget {
|
||||
if (controller.loadPengiriman.value == 1 &&
|
||||
controller.pengirimanModelList.isEmpty)
|
||||
const Center(
|
||||
child: TiadaDataWIdget(
|
||||
text: "Tiada data pengiriman\ndalam proses pengesahan")),
|
||||
child: TiadaDataWIdget(text: "Tiada log history pengiriman")),
|
||||
if (controller.loadPengiriman.value == 2)
|
||||
const ErrorLoadDataWidget(),
|
||||
],
|
||||
|
||||
@ -37,6 +37,7 @@ class TiadaDataWIdget extends StatelessWidget {
|
||||
child: Center(
|
||||
child: Text(
|
||||
text,
|
||||
textAlign: TextAlign.center,
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 20,
|
||||
|
||||
16
pubspec.lock
16
pubspec.lock
@ -120,6 +120,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
dio:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: dio
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.0.6"
|
||||
double_back_to_close_app:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -188,13 +195,6 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
flutter_barcode_scanner:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_barcode_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
flutter_easyloading:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -304,7 +304,7 @@ packages:
|
||||
source: hosted
|
||||
version: "2.1.7"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
url: "https://pub.dartlang.org"
|
||||
|
||||
@ -39,7 +39,7 @@ dependencies:
|
||||
double_back_to_close_app: ^2.0.1
|
||||
image_picker: ^0.8.5
|
||||
path_provider: ^2.0.9
|
||||
http: ^0.13.4
|
||||
# http: ^0.13.4
|
||||
flutter_easyloading: ^3.0.3
|
||||
crypto: ^3.0.1
|
||||
provider: ^6.0.2
|
||||
@ -66,9 +66,11 @@ dependencies:
|
||||
enhance_stepper: ^0.1.1
|
||||
logger: ^1.1.0
|
||||
# qr_code_scanner: ^0.7.0
|
||||
flutter_barcode_scanner: ^2.0.0
|
||||
# flutter_barcode_scanner: ^2.0.0
|
||||
scan: ^1.6.0
|
||||
qr_flutter: ^4.0.0
|
||||
dio: ^4.0.6
|
||||
|
||||
|
||||
# flutter_background_service_platform_interface: ^0.0.1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user