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.
 
 
 
 
 
 

505 lines
16 KiB

import 'package:cpay/api/api.dart';
import 'package:cpay/items/itemsTab/achatapi.dart';
import 'package:cpay/items/itemsTab/depot.dart';
import 'package:cpay/items/itemsTab/retrait.dart';
import 'package:cpay/items/itemsTab/virement.dart';
import 'package:cpay/items/loadingsimple.dart';
//import 'package:cpay/items/loading.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:intl/intl.dart';
import '../models/user.dart';
class Transaction extends StatefulWidget {
const Transaction({super.key});
@override
State<Transaction> createState() => _TransactionState();
}
class _TransactionState extends State<Transaction> {
Map<String, dynamic> listeGlobal = {};
List listeApis = [];
List listedepot = [];
List listvirement = [];
List listveretrait = [];
Map<String, dynamic> listnext = {};
bool loading = false;
bool loadinglist = false;
String totalSold = '';
int sold = 0;
int entr = 0;
int sort = 0;
NumberFormat format = NumberFormat("#,###");
String soldeafficher = "";
String soldeafficher2 = "";
String entree = '';
String entreeafficher = '';
String entreeafficher2 = '';
String sortie = '';
String sortieafficher = '';
String sortieafficher2 = '';
int pagedep = 1;
int pagevir = 1;
int pageRTR = 1;
int pageAPI = 1;
ScrollController scrollController = ScrollController();
ScrollController scrollControllerVIR = ScrollController();
ScrollController scrollControllerRTR = ScrollController();
ScrollController scrollControllerAPIS = ScrollController();
int scrollcount = 0;
//depot===========================================
Future getdepot() async {
setState(() {
loading = true;
});
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, 1);
for (int i = 0; i < listeGlobal["depot"].length; i++) {
listedepot.add(listeGlobal["depot"][i]);
}
if (listeGlobal.isNotEmpty) {
if (mounted) {
setState(() {
loading = false;
totalSold = listeGlobal['solde'];
sold = int.parse(totalSold);
soldeafficher = (format.format(sold)).toString();
soldeafficher2 = soldeafficher.replaceAll(',', ' ');
entree = listeGlobal['entree'];
entr = int.parse(entree);
entreeafficher = (format.format(entr)).toString();
entreeafficher2 = entreeafficher.replaceAll(',', ' ');
sortie = listeGlobal['sortie'];
sort = int.parse(sortie);
sortieafficher = (format.format(sort)).toString();
sortieafficher2 = sortieafficher.replaceAll(',', ' ');
pagedep = pagedep + 1;
});
}
}
}
Future scrolllistner() async {
if (scrollController.position.pixels ==
scrollController.position.maxScrollExtent) {
scrollcount = scrollcount + 1;
if (scrollcount == 1) {
if (pagedep <= listeGlobal["total_page_depot"]) {
setState(() {
loadinglist = true;
});
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, pagedep);
for (int i = 0; i < listeGlobal["depot"].length; i++) {
if (pagedep <= listeGlobal["total_page_depot"]) {
listedepot.add(listeGlobal["depot"][i]);
}
}
if (mounted) {
setState(() {
if (pagedep <= listeGlobal["total_page_depot"]) {
pagedep = pagedep + 1;
//print(page);
loadinglist = false;
scrollcount = 0;
}
});
}
}
}
}
}
//====================================================================
//===virement========================================================
Future getdeVirement() async {
setState(() {
loading = true;
});
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, 1);
for (int i = 0; i < listeGlobal["virement"].length; i++) {
listvirement.add(listeGlobal["virement"][i]);
}
if (listeGlobal.isNotEmpty) {
setState(() {
loading = false;
pagevir = pagevir + 1;
});
}
}
Future scrolllistnervirement() async {
if (scrollControllerVIR.position.pixels ==
scrollControllerVIR.position.maxScrollExtent) {
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, pagevir);
for (int i = 0; i < listeGlobal["virement"].length; i++) {
if (pagevir <= listeGlobal["total_page_virement"]) {
listvirement.add(listeGlobal["virement"][i]);
}
}
setState(() {
if (pagevir <= listeGlobal["total_page_virement"]) {
pagevir = pagevir + 1;
//print(page);
}
});
}
}
//===================================================================
//===Retrait========================================================
Future getRetrait() async {
setState(() {
loading = true;
});
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, 1);
for (int i = 0; i < listeGlobal["retrait"].length; i++) {
listveretrait.add(listeGlobal["retrait"][i]);
}
if (listeGlobal.isNotEmpty) {
setState(() {
loading = false;
pageRTR = pageRTR + 1;
});
}
}
Future scrolllistRetrait() async {
if (scrollControllerRTR.position.pixels ==
scrollControllerRTR.position.maxScrollExtent) {
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, pageRTR);
for (int i = 0; i < listeGlobal["retrait"].length; i++) {
if (pageRTR <= listeGlobal["total_page_retrait"]) {
listveretrait.add(listeGlobal["retrait"][i]);
}
}
setState(() {
if (pageRTR <= listeGlobal["total_page_retrait"]) {
pageRTR = pageRTR + 1;
//print(page);
}
});
}
}
//===================================================================
//APIS===============================================================
Future getApis() async {
setState(() {
loading = true;
});
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, 1);
for (int i = 0; i < listeGlobal["api"].length; i++) {
listeApis.add(listeGlobal["api"][i]);
}
if (listeGlobal.isNotEmpty) {
setState(() {
loading = false;
pageAPI = pageAPI + 1;
});
}
}
Future scrolllistApis() async {
if (scrollControllerAPIS.position.pixels ==
scrollControllerAPIS.position.maxScrollExtent) {
listeGlobal = await Api.getDepotlist(User.sessionUser!.iban, pageAPI);
for (int i = 0; i < listeGlobal["api"].length; i++) {
if (pageAPI <= listeGlobal["total_page_api"]) {
listeApis.add(listeGlobal["api"][i]);
}
}
setState(() {
if (pageAPI <= listeGlobal["total_page_api"]) {
pageAPI = pageAPI + 1;
//print(page);
}
});
}
}
//=================================================================================
bool zoomin = true;
setzoom() {
setState(() {
zoomin = !zoomin;
});
}
@override
void initState() {
super.initState();
scrollController.addListener(scrolllistner);
scrollControllerVIR.addListener(scrolllistnervirement);
scrollControllerRTR.addListener(scrolllistRetrait);
scrollControllerAPIS.addListener(scrolllistApis);
getdepot();
getdeVirement();
getRetrait();
getApis();
}
@override
void dispose() {
super.dispose();
scrollController.dispose();
scrollControllerVIR.dispose();
scrollControllerRTR.dispose();
scrollControllerAPIS.dispose();
}
@override
Widget build(BuildContext context) {
final tabpage = <Widget>[
loading
? const Loading(
spincouleur: Color(0xFF6334A9),
)
: DepotListe(
list: listedepot,
control: scrollController,
loadlist: loadinglist,
),
loading
? const Loading(
spincouleur: Color(0xFF6334A9),
)
: Virement(list: listvirement, control: scrollControllerVIR),
loading
? const Loading(
spincouleur: Color(0xFF6334A9),
)
: AchatApis(list: listeApis, control: scrollControllerAPIS),
loading
? const Loading(
spincouleur: Color(0xFF6334A9),
)
: Retrait(list: listveretrait, control: scrollControllerRTR),
];
final buttonTop = <Tab>[
const Tab(
text: "Depot",
),
const Tab(
text: "Virement",
),
const Tab(
text: "Apis",
),
const Tab(
text: "Retrait",
)
];
assert(tabpage.length == buttonTop.length);
return DefaultTabController(
length: tabpage.length,
child: Scaffold(
body: Column(
children: [
Container(
height: 100.sp,
decoration: BoxDecoration(
color: const Color(0xFF6334A9),
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(50.sp),
bottomRight: Radius.circular(50.sp))),
child: Center(
child: Column(
children: [
SizedBox(
height: 30.sp,
),
Text(
textAlign: TextAlign.center,
"iban CPAY:",
style: TextStyle(
fontSize: 20.sp,
fontWeight: FontWeight.normal,
color: Colors.white,
fontFamily: 'PlusJakartaSans',
),
),
Text(
textAlign: TextAlign.center,
User.sessionUser!.iban,
style: TextStyle(
fontSize: 20.sp,
fontWeight: FontWeight.bold,
color: Colors.white,
fontFamily: 'PlusJakartaSans',
),
),
SizedBox(
height: 10.sp,
),
Container(
width: 60.sp,
height: 1.sp,
color: Colors.white,
)
],
),
),
),
Center(
child: Column(
children: [
SizedBox(
// color: Colors.blue,
height: 50.sp,
child: Align(
alignment: Alignment.center,
child: Text(
'Solde',
style: TextStyle(
fontSize: 15.sp,
fontWeight: FontWeight.normal,
color: Colors.grey,
fontFamily: 'PlusJakartaSans',
),
),
),
),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(60.sp)),
border: Border.all(
width: 1,
color: const Color(0xFF6334A9),
),
//color: Colors.green,
),
child: Padding(
padding: EdgeInsets.only(
top: 8.0,
bottom: 8.0.sp,
left: 30.0.sp,
right: 30.0.sp),
child: Text(
"$soldeafficher2 MGA",
style: TextStyle(
fontSize: 18.sp,
fontWeight: FontWeight.bold,
color: const Color(0xFF6334A9),
fontFamily: 'PlusJakartaSans',
),
),
),
),
],
),
),
SizedBox(
width: MediaQuery.of(context).size.width * 0.8,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: SizedBox(
height: 50.sp,
// width: 150.sp,
child: Align(
alignment: Alignment.centerRight,
child: ListTile(
leading: GestureDetector(
onTap: () {
setzoom();
},
child: const Icon(
Icons.arrow_circle_up_outlined,
color: Colors.grey,
),
),
title: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
"$entreeafficher2 MGA",
style: TextStyle(
fontSize: 12.sp,
fontWeight: FontWeight.bold,
color: const Color(0xFF6334A9),
fontFamily: 'PlusJakartaSans',
),
),
),
subtitle: Text(
"Total depot",
style: TextStyle(
fontSize: 9.sp,
fontWeight: FontWeight.normal,
color: Colors.grey,
fontFamily: 'PlusJakartaSans',
),
),
),
),
),
),
Expanded(
child: SizedBox(
height: 50.sp,
child: Align(
alignment: Alignment.centerLeft,
child: ListTile(
leading: const Icon(
Icons.arrow_circle_down_outlined,
color: Colors.grey,
),
title: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
"$sortieafficher2 MGA",
style: TextStyle(
fontSize: 12.sp,
fontWeight: FontWeight.bold,
color: const Color(0xFF6334A9),
fontFamily: 'PlusJakartaSans',
),
),
),
subtitle: Text(
"Total retrait",
style: TextStyle(
fontSize: 9.sp,
fontWeight: FontWeight.normal,
color: Colors.grey,
fontFamily: 'PlusJakartaSans',
),
),
),
),
),
)
],
),
),
SizedBox(
height: 20.sp,
),
SizedBox(
width: (MediaQuery.of(context).size.width) * 0.8,
child: TabBar(
unselectedLabelColor: const Color(0xFF6334A9),
labelColor: Colors.grey,
tabs: buttonTop,
),
),
SizedBox(
height: 20.sp,
),
Expanded(
child: TabBarView(
physics: const NeverScrollableScrollPhysics(),
children: tabpage,
),
),
],
),
),
);
}
}