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.
 
 
 
 
 
 

351 lines
10 KiB

//import 'dart:js_interop';
// ignore_for_file: avoid_print
import 'dart:async';
import 'package:cpay/api/api.dart';
import 'package:cpay/items/barre_rechrche.dart';
import 'package:cpay/items/categories.dart';
import 'package:cpay/items/error/errorTimeout.dart';
import 'package:cpay/items/error/errorpage.dart';
import 'package:cpay/items/itemcategories.dart';
//import 'package:cpay/items/itemcategories.dart';
//import 'package:cpay/items/loading.dart';
import 'package:cpay/items/loadinglistview.dart';
import 'package:cpay/items/loadingsimple.dart';
import 'package:cpay/models/articles.dart';
import 'package:cpay/pages/details_article.dart';
//import 'package:cpay/pages/details_article.dart';
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../items/cardArticle.dart';
class MesArticles extends StatefulWidget {
const MesArticles({super.key});
@override
State<MesArticles> createState() => _MesArticlesState();
}
class _MesArticlesState extends State<MesArticles> {
TextEditingController rechCOntrol = TextEditingController();
Color couleurCpay = const Color(0xFF6334A9);
List articles = [];
bool loading = false;
bool listchargement = false;
int scrollmaxcount = 0;
//int listeArticlelength = articles.length;
List<Article> afterRech = [];
List listCategories = [];
bool recherche = false;
bool categrorie = false;
//String text='';
String motcle = '';
int page = 1;
int totalpage = 0;
bool mobiledata = true;
ScrollController onScrollmax = ScrollController();
affichCategries() {
setState(() {
categrorie = !categrorie;
});
}
fillCategorieslist() {
if (Itemcategories.listselect.isEmpty) {
for (int i = 0; i < listCategories.length; i++) {
Itemcategories.listselect.add(listCategories[i]['id']);
}
print(Itemcategories.listselect);
}
}
rechercher() {
setState(() {
recherche = true;
});
afterRech.clear();
motcle = rechCOntrol.text;
for (int i = 0; i < articles.length; i++) {
if (articles[i].titre == motcle) {
afterRech.add(articles[i]);
}
}
print(afterRech);
}
motvide() {
setState(() {
rechCOntrol.clear();
rechCOntrol.clearComposing();
recherche = false;
print(recherche);
});
}
// Future getarticle() async {
// setState(() {
// loading = true;
// });
// try {
// var arttemp = await Api.getarticle(1);
// print(arttemp["total_page"]);
// totalpage = arttemp["total_page"];
// if (arttemp != {}) {
// for (int i = 0; i < arttemp['mdata'].length; i++) {
// articles.add(arttemp['mdata'][i]);
// }
// setState(() {
// loading = false;
// page = page + 1;
// });
// }
// } catch (e) {
// print(e);
// }
// }
Future getCategories() async {
var mapcategories = await Api.getcategories();
if (mapcategories != {}) {
for (int i = 0; i < mapcategories['mdata'].length; i++) {
listCategories.add(mapcategories['mdata'][i]);
}
}
}
Future searchbycategories() async {
print('hello');
articles.clear();
setState(() {
loading = true;
mobiledata = true;
categrorie = false;
});
// setState(() {
// categrorie = false;
// });
try {
var arttemp = await Api.getarticlebycategories(
Categoris.filtre, page, BarreRech.text);
print(arttemp["total_page"]);
totalpage = arttemp["total_page"];
if (arttemp != {}) {
for (int i = 0; i < arttemp['mdata'].length; i++) {
articles.add(arttemp['mdata'][i]);
}
//print(articles);
setState(() {
loading = false;
page = page + 1;
});
}
} catch (e) {
if (e is TimeoutException) {
setState(() {
loading = false;
mobiledata = false;
print("mobiledata: $mobiledata");
});
} else {
setState(() {
loading = false;
mobiledata = false;
print("mobiledata: $mobiledata");
});
}
}
}
essai() {
//print("hello");
print(Categoris.filtre);
setState(() {
categrorie = false;
});
}
// Future searchbycategories() async {
// var mapcategories = await Api.getarticlebycategories(Categoris.filtre);
// if (mapcategories != {}) {
// for (int i = 0; i < mapcategories['mdata'].length; i++) {
// listCategories.add(mapcategories['mdata'][i]);
// }
// setState(() {
// categrorie = false;
// });
// }
// }
Future onScrollend() async {
// List scrolListtmep = [];
if (onScrollmax.position.pixels == onScrollmax.position.maxScrollExtent) {
scrollmaxcount = scrollmaxcount + 1;
if (scrollmaxcount == 1) {
print(scrollmaxcount);
if (page <= totalpage) {
setState(() {
listchargement = true;
});
var scrolListtmep = await Api.getarticlebycategories(
Categoris.filtre, page, BarreRech.text);
for (int i = 0; i < scrolListtmep["mdata"].length; i++) {
articles.add(scrolListtmep["mdata"][i]);
}
setState(() {
page = page + 1;
listchargement = false;
scrollmaxcount = 0;
});
}
}
}
}
@override
void initState() {
// TODO: implement initState
searchbycategories();
//getarticle();
getCategories().whenComplete(() => fillCategorieslist());
onScrollmax.addListener(onScrollend);
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
onScrollmax.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Stack(
children: [
Column(
//mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
SizedBox(
height: 10.sp,
),
//barredeRecherche(context),
Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: BarreRech(
context: context,
affichCategries: () => affichCategries(),
onchangedtext: () {
page = 1;
searchbycategories();
//print(BarreRech.text);
},
),
),
loading
? const Expanded(
child: Loading(
spincouleur: Color(0xFF6334A9),
),
)
: Expanded(
child: mobiledata
? (articles.isNotEmpty
? ListviewArticle()
: PageEror())
: PageTimeout(func: () {
searchbycategories();
}),
),
Visibility(
visible: listchargement,
child: const SizedBox(
height: 20,
child: LoadingLisview(),
),
)
//const LoadingLisview(),
],
),
Visibility(
visible: categrorie,
child: Align(
alignment: const Alignment(0, -0.65),
child: Categoris(
listcat: listCategories,
fuctionannuler: () {
setState(() {
categrorie = false;
});
},
dosearch: () {
//essai();
scrollmaxcount = 0;
page = 1;
searchbycategories();
},
// dosearch: searchbycategories(),
).animate().fade(),
),
)
],
),
));
}
ListView ListviewArticle() {
return ListView.builder(
controller: onScrollmax,
itemCount: !recherche ? articles.length : afterRech.length,
itemBuilder: (context, index) => Padding(
padding: EdgeInsets.only(right: 7.0.w, left: 7.0.w),
child: GestureDetector(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetaisArticle(
id: articles[index]['id'],
id_categorie: articles[index]['id_categorie'],
categorie: articles[index]['categorie'],
photos: articles[index]['photos'],
designation: articles[index]['designation'],
prix_ticket: articles[index]['prix_ticket'],
reference: articles[index]['reference'],
pourcentage: articles[index]['pourcentage'],
date_tirage: articles[index]['date_tirage']),
)),
child: SizedBox(
height: 180.spMax,
child: Padding(
padding: const EdgeInsets.only(top: 5.0, bottom: 5),
child: CardArticle(
couleurCpay: couleurCpay,
id: articles[index]['id'],
id_categorie: articles[index]['id_categorie'],
categorie: articles[index]['categorie'],
photos: articles[index]['photos'],
designation: articles[index]['designation'],
prix_ticket: articles[index]['prix_ticket'],
reference: articles[index]['reference'],
pourcentage: articles[index]['pourcentage'],
date_tirage: articles[index]['date_tirage']),
// child: CardArticle(
// couleurCpay: couleurCpay,
// article:
// !recherche ? articles[index] : afterRech[index],
// ),
),
),
//),
)));
}
}