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.
 
 
 
 
 
 

499 lines
16 KiB

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:cpay/items/categories.dart';
import 'package:cpay/items/error/errorpage.dart';
//import 'package:cpay/items/categories.dart';
import 'package:cpay/items/essaidialog.dart';
//import 'package:cpay/items/barre_rechrche.dart';
import 'package:cpay/items/itemsTab/trading.dart';
//import 'package:cpay/items/loadinglistview.dart';
import 'package:cpay/models/user.dart';
import 'package:cpay/pages/authentification.dart';
import 'package:cpay/pages/depotpage.dart';
//import 'package:cpay/pages/login.dart';
import 'package:cpay/pages/mes_articles.dart';
import 'package:cpay/pages/qr_code_page.dart';
import 'package:cpay/pages/transaction.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:quickalert/quickalert.dart';
import '../items/bulle.dart';
import '../models/articles.dart';
class Accueil extends StatefulWidget {
const Accueil({super.key});
@override
State<Accueil> createState() => _AccueilState();
}
class _AccueilState extends State<Accueil> with SingleTickerProviderStateMixin {
late ConnectivityResult _connectionStatus;
//late Duration dur;
final Connectivity _connectivity = Connectivity();
int currentTabIndex = 0;
//=======================SnackBar============================================================================
notifConnection(ConnectivityResult status) {
if (status == ConnectivityResult.none) {
fToast.showToast(
child: notificatinConnectionDesabled,
toastDuration: const Duration(days: 365),
gravity: ToastGravity.TOP);
} else {
fToast.removeQueuedCustomToasts();
fToast.showToast(
child: notificatinConnectionEnabled,
toastDuration: const Duration(seconds: 2),
gravity: ToastGravity.TOP);
}
}
Future<void> initConnectivity() async {
final List<ConnectivityResult> results =
await _connectivity.checkConnectivity();
final ConnectivityResult result =
results.isNotEmpty ? results.first : ConnectivityResult.none;
setState(() {
_connectionStatus = result;
});
_connectivity.onConnectivityChanged
.listen((List<ConnectivityResult> results) {
final ConnectivityResult status =
results.isNotEmpty ? results.first : ConnectivityResult.none;
setState(() {
_connectionStatus = status;
});
notifConnection(_connectionStatus);
});
WidgetsBinding.instance.addPostFrameCallback((_) {
notifConnection(_connectionStatus);
});
}
//========================Snackbar=========================================
//=========================Titre de page control================================================
bool log = true;
String titre = "Articles";
void defTitle(int val) {
if (val == 0) {
setState(() {
titre = "Articles";
});
} else if (val == 1) {
setState(() {
titre = "Trading";
});
} else if (val == 2) {
setState(() {
titre = "Mon compte";
});
} else if (val == 3) {
setState(() {
titre = "Achat via code Qr";
});
}
}
Map<String, dynamic> list = {};
List<Map<String, dynamic>> list22 = [];
//===========================Titre de page control===================================================================================
//==============================Alert=======================================================================
void alert(String titreAlert, String textAlert, String comfirmText,
QuickAlertType typeAlert, VoidCallback func) {
QuickAlert.show(
confirmBtnText: comfirmText,
context: context,
type: typeAlert,
title: titreAlert,
text: textAlert,
onConfirmBtnTap: func,
confirmBtnColor: const Color(0xFF6334A9));
}
void showalert(String type, String titrealert, String descri,
String textsurboutton, bool annulerBtn, VoidCallback functionConfirm) {
showDialog(
context: context,
builder: (BuildContext context) => AlertAlert(
typealert: type,
titleAlert: titrealert,
descriAlert: descri,
confirmbtnText: textsurboutton,
cancelbtn: annulerBtn,
onpresConfirm: functionConfirm,
));
}
//=====================Alert=======================================================================================
//====================controle de visibility==============================
late AnimationController _animcontroller;
bool isvisible = false;
setVisibleBulle() {
setState(() {
isvisible = !isvisible;
});
}
bool visibledepar = true;
visibledep() {
if (visibledepar) {
setState(() {
visibledepar = false;
});
}
}
visibledep2() {
if (!visibledepar) {
setState(() {
visibledepar = true;
});
}
setcontrol();
}
setcontrol() {
if (isvisible) {
_animcontroller.forward();
} else {
_animcontroller.reverse();
setState(() {
visibledepar = false;
});
}
}
//======================InitState======================================================================================
late FToast fToast;
late Article article;
@override
void initState() {
// TODO: implement initState
super.initState();
fToast = FToast();
fToast.init(context);
initConnectivity();
User.getUser();
visibledep();
_animcontroller = AnimationController(
vsync: this, duration: const Duration(milliseconds: 200));
}
@override
void dispose() {
// TODO: implement dispose
_animcontroller.dispose();
super.dispose();
}
ontabBullButton() {
setVisibleBulle();
visibledep2();
}
goTodepot() {
//print('HELLO');
Navigator.push(
context, MaterialPageRoute(builder: (context) => const PageDepot()));
}
//============================Widget=======================================================================
@override
Widget build(BuildContext context) {
final ktabpage = <Widget>[
const MesArticles(),
const Trading(),
const Transaction(),
const QrCode(),
];
final kBottomNavBar = <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(
Icons.home,
size: 20.0.sp,
),
label: 'ACCUEIL'),
BottomNavigationBarItem(
icon: Icon(
Icons.candlestick_chart,
size: 20.0.sp,
),
label: 'TRADING'),
BottomNavigationBarItem(
icon: Icon(
Icons.send_to_mobile_outlined,
size: 20.0.sp,
),
label: 'MON COMPTE'),
BottomNavigationBarItem(
icon: Icon(
Icons.qr_code,
size: 20.0.sp,
),
label: 'SCAN QR'),
];
assert(ktabpage.length == kBottomNavBar.length);
final botomNavBar = BottomNavigationBar(
items: kBottomNavBar,
iconSize: 20.0.sp,
selectedFontSize: 12.0.sp,
unselectedFontSize: 10.0.sp,
currentIndex: currentTabIndex,
type: BottomNavigationBarType.fixed,
onTap: (int index) {
if (User.sessionUser != null) {
setState(() {
currentTabIndex = index;
});
defTitle(index);
} else {
showalert("info", "Authentification requis",
"Veuillez vous connecter.", "Se Connecter", false, () {
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const Authentification()));
});
}
},
);
return WillPopScope(
onWillPop: () async {
SystemNavigator.pop();
return false;
},
child: Scaffold(
appBar: AppBar(
title: Center(
child: Text(
textAlign: TextAlign.center,
titre,
style: TextStyle(
fontSize: 20.sp,
fontWeight: FontWeight.bold,
color: Colors.white,
fontFamily: 'PlusJakartaSans',
),
),
),
leading: IconButton(
icon: Image(
width: 30.sp,
height: 30.sp,
image: const AssetImage('lib/photos/285-min.png'),
),
onPressed: () {
//print(Categoris.filtre);
// showalert("info", "Se connecter",
// "Vous devez connecter pour faire cette action", () {
// Navigator.pop(context);
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => const Authentification()));
// });
// Navigator.push(context,
// MaterialPageRoute(builder: (context) => const PageEror()));
print(DateTime.now().microsecondsSinceEpoch / 1000);
},
),
actions: [
User.sessionUser == null && log
? IconButton(
icon: Icon(
size: 20.sp,
Icons.account_circle_outlined,
color: Colors.white,
),
onPressed: () {
// Action à effectuer lorsque l'icône de droite est cliquée
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const Authentification()));
},
)
: User.sessionUser == null && !log
? IconButton(
icon: Icon(
size: 20.sp,
Icons.logout,
color: Colors.white,
),
onPressed: () {
// Action à effectuer lorsque l'icône de droite est cliquée
showalert(
"do you",
"Deconnexion",
"Voulez vous vraiment deconnecter?",
"Se Deconnecter",
true, () {
User.logOut();
setState(() {
currentTabIndex = 0;
});
Navigator.pop(context);
setState(() {
log = true;
});
});
// alert(
// "Deconnexion",
// "Voulez vous vraiment deconnecter",
// "Deconnexion",
// QuickAlertType.confirm, () {
// User.logOut();
// setState(() {
// currentTabIndex = 0;
// });
// Navigator.pop(context);
// setState(() {
// log = true;
// });
// });
},
)
: IconButton(
icon: const Icon(
Icons.logout,
color: Colors.white,
),
onPressed: () {
// Action à effectuer lorsque l'icône de droite est cliquée
showalert(
"do you",
"Deconnexion",
"Voulez vous vraiment deconnecter?",
"Se Deconnecter",
true, () {
User.logOut();
setState(() {
currentTabIndex = 0;
});
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const Accueil()));
setState(() {
log = true;
});
});
// alert(
// "Deconnexion",
// "Voulez vous vraiment deconnecter",
// "Deconnexion",
// QuickAlertType.confirm, () {
// User.logOut();
// Navigator.pop(context);
// setState(() {
// log = true;
// });
// });
},
),
],
backgroundColor: const Color(0xFF6334A9),
),
body: Stack(
children: [
ktabpage[currentTabIndex],
Visibility(
visible: visibledepar,
child: Container(
color: Colors.black.withOpacity(0.5),
))
.animate(
controller: _animcontroller,
)
.fade(
duration: const Duration(milliseconds: 100),
),
Visibility(
visible: visibledepar,
child: Align(
alignment: const Alignment(1, 0.6),
child: SizedBox(
height: 300.h,
width: 70.w,
child: BulleRetraitVers(
func: () => ontabBullButton(),
)
.animate(
controller: _animcontroller,
)
.scaleY(
duration: const Duration(milliseconds: 100),
alignment: const Alignment(1, 1)),
),
),
),
],
),
floatingActionButton: SizedBox(
height: 50.sp,
width: 50.sp,
child: FloatingActionButton(
backgroundColor: const Color(0xFF6334A9),
onPressed: () {
setVisibleBulle();
visibledep2();
},
child: Icon(
size: 25.sp,
Icons.payment,
color: Colors.white,
),
),
),
bottomNavigationBar: botomNavBar,
),
);
}
Widget notificatinConnectionDesabled = Container(
padding: EdgeInsets.symmetric(horizontal: 24.0.h, vertical: 12.0.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0),
color: Colors.red,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.wifi_off_sharp),
SizedBox(
width: 12.0.w,
),
const Text('Connexion perdue')
],
),
);
Widget notificatinConnectionEnabled = Container(
padding: EdgeInsets.symmetric(horizontal: 24.0.w, vertical: 12.0.h),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0),
color: Colors.green,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.wifi),
SizedBox(
width: 12.0.w,
),
const Text('Connexion retablis')
],
),
);
}