You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

293 lines
9.0 KiB

3 years ago
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:teso/Pages/PageWidgets/CoinPurchase/MomoType.dart';
import 'package:teso/providers/user_provider.dart';
import 'package:teso/util/SizeConfig.dart';
import 'package:teso/util/consts.dart';
import 'package:http/http.dart' as http;
class WithdrawalPage extends StatefulWidget {
final String? momonumber;
final String? amount;
final String? provider;
const WithdrawalPage({Key? key, this.momonumber, this.amount, this.provider})
3 years ago
: super(key: key);
@override
_WithdrawalPageState createState() => _WithdrawalPageState();
}
class _WithdrawalPageState extends State<WithdrawalPage> {
String? processing = "Processing request, please wait";
3 years ago
bool confirmBox = false;
String? recipientName = "";
String? currency;
late String image;
3 years ago
submit() async {
String? num = widget.momonumber;
String? provider = widget.provider;
3 years ago
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso")!;
3 years ago
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
var register2 =
paymentServer + "withdrawals/getAccountInfo/$provider/account/$num";
var client1 =
await http.get(Uri.parse(register2), headers: requestHeaders);
if (client1.statusCode == 200) {
var parsedJson = json.decode(client1.body);
if (parsedJson["status-text"] == "Success") {
setState(() {
confirmBox = true;
recipientName = parsedJson["account-info"];
currency = parsedJson["options"][0]["currency"];
});
} else if (parsedJson["status"] == 4) {
setState(() {
confirmBox = false;
processing = parsedJson["status-text"];
});
} else {
setState(() {
confirmBox = false;
processing = "Request Failed, please try again later !!!";
});
}
}
} catch (e) {}
if (!confirmBox)
Future.delayed(Duration(seconds: 5), () => Navigator.pop(context));
}
withdraw() async {
setState(() {
confirmBox = false;
});
String? num = widget.momonumber;
String? withdraw = widget.amount;
String? provider = widget.provider;
3 years ago
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
String token = prefs.getString("tokensTeso")!;
3 years ago
Map<String, String> requestHeaders = {
'Content-type': 'application/json',
'Authorization': token
};
Map<String, String?> body = {
3 years ago
"provider": provider,
"number": num,
"amount": withdraw,
};
var register2 = paymentServer + "withdrawals/cashout";
var client1 = await http.post(
Uri.parse(register2),
headers: requestHeaders,
body: json.encode(body),
);
if (client1.statusCode == 200) {
if (client1.body == "Payment Made") {
setState(() {
confirmBox = false;
processing = "Payment made successfully";
});
} else if (client1.body == "Payment Pending") {
setState(() {
confirmBox = false;
processing = "Payment submitted successfully, " +
"funds maybe transferred to the specified as soon as possible";
});
}
} else {
if (client1.body == "Insufficient Gold") {
setState(() {
confirmBox = false;
processing =
"Insufficient Gold coins, you need to have more than 9 gold coins to make a withdrawal";
});
} else {
setState(() {
confirmBox = false;
processing = "Request Failed, please try again later !!!";
});
}
}
} catch (e) {}
Provider.of<UserProvider>(context, listen: false).getUserInformation();
if (!confirmBox)
Future.delayed(Duration(seconds: 5), () => Navigator.pop(context));
}
@override
void initState() {
switch (widget.provider) {
case "VODAFONE":
setState(() {
image = "assets/images/Vodafone.png";
});
break;
case "MTN":
setState(() {
image = "assets/images/MTN.png";
});
break;
case "AIRTEL":
setState(() {
image = "assets/images/AirtelTigo.png";
});
break;
}
submit();
super.initState();
}
select(s) {}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: !confirmBox ? pendingCenter(context) : confirmCenter(context),
),
);
}
Widget pendingCenter(BuildContext context) {
return Container(
width: 200,
height: 200,
child: Column(
children: [
Container(
child: processing == "Processing request, please wait"
? CupertinoActivityIndicator(
animating: true,
radius: 15,
)
: processing!.contains("successfully")
3 years ago
? Icon(
Icons.check_circle,
color: Colors.green,
size: SizeConfig.safeBlockHorizontal * 20,
)
: Icon(
Icons.error,
color: Colors.red,
size: SizeConfig.safeBlockHorizontal * 30,
),
),
SizedBox(
height: 10,
),
Container(
child: Text(
processing!,
3 years ago
textAlign: TextAlign.center,
style: TextStyle(
fontSize: SizeConfig.safeBlockHorizontal * 3.8,
),
),
),
],
),
);
}
Widget confirmCenter(BuildContext context) {
SizeConfig().init(context);
return Container(
width: SizeConfig.safeBlockHorizontal * 72,
height: SizeConfig.safeBlockVertical * 42,
child: Container(
width: SizeConfig.safeBlockHorizontal * 72,
height: SizeConfig.safeBlockVertical * 42,
child: Column(
children: [
SizedBox(
height: 20,
),
buildType(context, image, widget.provider, select, widget.provider),
SizedBox(
height: 20,
),
Container(
child: Text(
"You requested to withdraw $currency ${widget.amount} to $recipientName on ${widget.momonumber}",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: SizeConfig.safeBlockHorizontal * 3.8,
),
),
),
SizedBox(
height: 20,
),
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
),
primary: Color(0xFFb90222),
padding: new EdgeInsets.all(10.0),
),
onPressed: () => Navigator.pop(context),
child: new Container(
height: 20.0,
width: 70.0,
alignment: Alignment.center,
decoration: new BoxDecoration(
color: Color(0xFFb90222),
borderRadius: new BorderRadius.circular(60.0),
),
child: new Text(
"Cancel",
style: new TextStyle(color: Colors.white),
),
),
),
SizedBox(
width: 10,
),
new ElevatedButton(
style: ElevatedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
),
primary: Colors.green,
padding: new EdgeInsets.all(10.0),
),
onPressed: withdraw,
child: new Container(
height: 20.0,
width: 70.0,
alignment: Alignment.center,
decoration: new BoxDecoration(
color: Colors.green,
borderRadius: new BorderRadius.circular(60.0),
),
child: new Text(
"Confirm",
style: new TextStyle(color: Colors.white),
),
),
),
],
)
],
),
),
);
}
}