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.
709 lines
12 KiB
709 lines
12 KiB
import 'dart:convert';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:supplier_new/common/settings.dart';
|
|
import 'package:supplier_new/users/pending_suppliers_model.dart';
|
|
|
|
import 'connected_users_model.dart';
|
|
|
|
class MyUsers extends StatefulWidget {
|
|
|
|
var navigationFrom;
|
|
|
|
MyUsers({this.navigationFrom});
|
|
|
|
@override
|
|
State<MyUsers> createState() => _MyUsersState();
|
|
|
|
}
|
|
|
|
class _MyUsersState extends State<MyUsers>
|
|
with TickerProviderStateMixin {
|
|
|
|
late TabController _controller;
|
|
|
|
bool isPendingLoading=false;
|
|
bool isConnectedLoading=false;
|
|
bool isRejectedLoading=false;
|
|
|
|
List<PendingSuppliersModel> pendingCustomersList=[];
|
|
List<ConnectedCustomersModel> connectedCustomersList=[];
|
|
List<PendingSuppliersModel> rejectedCustomersList=[];
|
|
|
|
@override
|
|
void initState(){
|
|
|
|
super.initState();
|
|
|
|
_controller=TabController(length:3,vsync:this);
|
|
|
|
_controller.addListener(() {
|
|
|
|
setState(() {});
|
|
|
|
});
|
|
|
|
getPendingCustomers();
|
|
getConnectedCustomers();
|
|
|
|
}
|
|
|
|
Future<void> getPendingCustomers() async {
|
|
|
|
setState(() {
|
|
isPendingLoading=true;
|
|
});
|
|
|
|
try{
|
|
|
|
var response=
|
|
await AppSettings.getPendingSuppliers();
|
|
|
|
setState(() {
|
|
|
|
pendingCustomersList=
|
|
((jsonDecode(response)['data']) as List)
|
|
.map((dynamic model){
|
|
|
|
return PendingSuppliersModel.fromJson(model);
|
|
|
|
}).toList();
|
|
|
|
isPendingLoading=false;
|
|
|
|
});
|
|
|
|
}catch(e){
|
|
|
|
setState(() {
|
|
isPendingLoading=false;
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Future<void> getConnectedCustomers() async {
|
|
|
|
setState(() {
|
|
|
|
isConnectedLoading=true;
|
|
|
|
});
|
|
|
|
try{
|
|
|
|
var response=
|
|
await AppSettings.getConnectedCustomers();
|
|
|
|
setState(() {
|
|
|
|
connectedCustomersList=
|
|
((jsonDecode(response)['data']) as List)
|
|
.map((dynamic model){
|
|
|
|
return ConnectedCustomersModel.fromJson(model);
|
|
|
|
}).toList();
|
|
|
|
isConnectedLoading=false;
|
|
|
|
});
|
|
|
|
}catch(e){
|
|
|
|
setState(() {
|
|
isConnectedLoading=false;
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/*Future<void> getRejectedCustomers() async {
|
|
|
|
setState(() {
|
|
isRejectedLoading=true;
|
|
});
|
|
|
|
try{
|
|
|
|
var response=
|
|
await AppSettings.getRejectedCustomers();
|
|
|
|
setState(() {
|
|
|
|
rejectedCustomersList=
|
|
((jsonDecode(response)['data']) as List)
|
|
.map((dynamic model){
|
|
|
|
return PendingSuppliersModel.fromJson(model);
|
|
|
|
}).toList();
|
|
|
|
isRejectedLoading=false;
|
|
|
|
});
|
|
|
|
}catch(e){
|
|
|
|
setState(() {
|
|
isRejectedLoading=false;
|
|
});
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
Widget customerCard(String name,String phone,String address){
|
|
|
|
return Container(
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color:Color(0XFFFFFFFF),
|
|
|
|
borderRadius:BorderRadius.circular(12),
|
|
|
|
border:Border.all(
|
|
|
|
color:Colors.grey.shade300,
|
|
|
|
width:1,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
child:Padding(
|
|
|
|
padding:EdgeInsets.fromLTRB(10,10,10,10),
|
|
|
|
child:Row(
|
|
|
|
children:[
|
|
|
|
CircleAvatar(
|
|
|
|
radius:20,
|
|
|
|
backgroundColor:Color(0XFFE8F2FF),
|
|
|
|
child:Image.asset(
|
|
|
|
'images/profile_user.png',
|
|
|
|
width:50,
|
|
|
|
height:50,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
SizedBox(width:10),
|
|
|
|
Expanded(
|
|
|
|
child:Column(
|
|
|
|
crossAxisAlignment:
|
|
CrossAxisAlignment.start,
|
|
|
|
children:[
|
|
|
|
Text(
|
|
|
|
name,
|
|
|
|
style:fontTextStyle(
|
|
|
|
16,
|
|
Color(0XFF2D2E30),
|
|
FontWeight.w600),
|
|
|
|
),
|
|
|
|
SizedBox(height:4),
|
|
|
|
Text(
|
|
|
|
phone,
|
|
|
|
style:fontTextStyle(
|
|
|
|
12,
|
|
Color(0XFF515253),
|
|
FontWeight.w400),
|
|
|
|
),
|
|
|
|
SizedBox(height:4),
|
|
|
|
Text(
|
|
|
|
address,
|
|
|
|
style:fontTextStyle(
|
|
|
|
12,
|
|
Color(0XFF515253),
|
|
FontWeight.w400),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
Widget pendingTab(){
|
|
|
|
if(isPendingLoading){
|
|
|
|
return Center(
|
|
|
|
child:CircularProgressIndicator(
|
|
|
|
color:primaryColor,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if(pendingCustomersList.isEmpty){
|
|
|
|
return Center(
|
|
child:Text("No Pending Customers"),
|
|
);
|
|
|
|
}
|
|
|
|
return ListView.separated(
|
|
|
|
padding:EdgeInsets.all(10),
|
|
|
|
itemCount:pendingCustomersList.length,
|
|
|
|
separatorBuilder:(c,i)=>SizedBox(height:10),
|
|
|
|
itemBuilder:(context,index){
|
|
|
|
return Column(
|
|
|
|
children:[
|
|
|
|
customerCard(
|
|
|
|
pendingCustomersList[index].customer_name,
|
|
|
|
pendingCustomersList[index].customer_phone_number,
|
|
|
|
pendingCustomersList[index].customer_address
|
|
|
|
),
|
|
|
|
SizedBox(height:8),
|
|
|
|
Row(
|
|
|
|
children:[
|
|
|
|
Expanded(
|
|
|
|
child:GestureDetector(
|
|
|
|
onTap:() async {
|
|
|
|
var payload={};
|
|
|
|
payload["supplierId"]=
|
|
AppSettings.supplierId;
|
|
|
|
payload["customerId"]=
|
|
pendingCustomersList[index]
|
|
.customer_id;
|
|
|
|
bool status=
|
|
await AppSettings.acceptRequest(
|
|
payload);
|
|
|
|
if(status){
|
|
|
|
AppSettings.longSuccessToast(
|
|
"Accepted");
|
|
|
|
getPendingCustomers();
|
|
getConnectedCustomers();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
child:Container(
|
|
|
|
decoration:BoxDecoration(
|
|
|
|
color:Colors.white,
|
|
|
|
border:Border.all(
|
|
color:Color(0XFF098603)
|
|
),
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(24),
|
|
|
|
),
|
|
|
|
padding:EdgeInsets.symmetric(
|
|
vertical:12),
|
|
|
|
alignment:Alignment.center,
|
|
|
|
child:Text(
|
|
|
|
"Accept",
|
|
|
|
style:fontTextStyle(
|
|
|
|
12,
|
|
Color(0XFF098603),
|
|
FontWeight.w600),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
SizedBox(width:10),
|
|
|
|
Expanded(
|
|
|
|
child:GestureDetector(
|
|
|
|
onTap:() async {
|
|
|
|
var payload={};
|
|
|
|
payload["supplierId"]=
|
|
AppSettings.supplierId;
|
|
|
|
payload["customerId"]=
|
|
pendingCustomersList[index]
|
|
.customer_id;
|
|
|
|
bool status=
|
|
await AppSettings.rejectRequest(
|
|
payload);
|
|
|
|
if(status){
|
|
|
|
AppSettings.longSuccessToast(
|
|
"Rejected");
|
|
|
|
getPendingCustomers();
|
|
//getRejectedCustomers();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
child:Container(
|
|
|
|
decoration:BoxDecoration(
|
|
|
|
color:Colors.white,
|
|
|
|
border:Border.all(
|
|
color:Colors.red
|
|
),
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(24),
|
|
|
|
),
|
|
|
|
padding:EdgeInsets.symmetric(
|
|
vertical:12),
|
|
|
|
alignment:Alignment.center,
|
|
|
|
child:Text(
|
|
|
|
"Reject",
|
|
|
|
style:fontTextStyle(
|
|
|
|
12,
|
|
Colors.red,
|
|
FontWeight.w600),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
Widget connectedTab(){
|
|
|
|
if(isConnectedLoading){
|
|
|
|
return Center(
|
|
|
|
child:CircularProgressIndicator(
|
|
color:primaryColor),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if(connectedCustomersList.isEmpty){
|
|
|
|
return Center(
|
|
child:Text("No Connected Customers"),
|
|
);
|
|
|
|
}
|
|
|
|
return ListView.separated(
|
|
|
|
padding:EdgeInsets.all(10),
|
|
|
|
itemCount:connectedCustomersList.length,
|
|
|
|
separatorBuilder:(c,i)=>SizedBox(height:10),
|
|
|
|
itemBuilder:(context,index){
|
|
|
|
return customerCard(
|
|
|
|
connectedCustomersList[index].customer_name,
|
|
|
|
connectedCustomersList[index]
|
|
.customer_phone_number,
|
|
|
|
connectedCustomersList[index]
|
|
.customer_address
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
Widget rejectedTab(){
|
|
|
|
if(isRejectedLoading){
|
|
|
|
return Center(
|
|
|
|
child:CircularProgressIndicator(
|
|
color:primaryColor),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
if(rejectedCustomersList.isEmpty){
|
|
|
|
return Center(
|
|
child:Text("No Rejected Requests"),
|
|
);
|
|
|
|
}
|
|
|
|
return ListView.separated(
|
|
|
|
padding:EdgeInsets.all(10),
|
|
|
|
itemCount:rejectedCustomersList.length,
|
|
|
|
separatorBuilder:(c,i)=>SizedBox(height:10),
|
|
|
|
itemBuilder:(context,index){
|
|
|
|
return customerCard(
|
|
|
|
rejectedCustomersList[index].customer_name,
|
|
|
|
rejectedCustomersList[index]
|
|
.customer_phone_number,
|
|
|
|
rejectedCustomersList[index]
|
|
.customer_address
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context){
|
|
|
|
return Scaffold(
|
|
|
|
backgroundColor:Colors.white,
|
|
|
|
appBar:AppBar(
|
|
|
|
elevation:0,
|
|
|
|
backgroundColor:Colors.white,
|
|
|
|
title:Text(
|
|
|
|
"Customers",
|
|
|
|
style:fontTextStyle(
|
|
14,
|
|
Color(0XFF2A2A2A),
|
|
FontWeight.w500),
|
|
|
|
),
|
|
|
|
bottom:PreferredSize(
|
|
|
|
preferredSize:Size.fromHeight(70),
|
|
|
|
child:Container(
|
|
|
|
margin:EdgeInsets.symmetric(
|
|
horizontal:16,
|
|
vertical:8),
|
|
|
|
padding:EdgeInsets.all(4),
|
|
|
|
decoration:BoxDecoration(
|
|
|
|
color:Color(0xFFF5F6F6),
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(23),
|
|
|
|
),
|
|
|
|
child:ClipRRect(
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(19),
|
|
|
|
child:TabBar(
|
|
|
|
controller:_controller,
|
|
|
|
indicator:BoxDecoration(),
|
|
|
|
dividerColor:Colors.transparent,
|
|
|
|
tabs:List.generate(3,(index){
|
|
|
|
final labels=[
|
|
"Pending",
|
|
"Connected",
|
|
"Rejected"
|
|
];
|
|
|
|
return Container(
|
|
|
|
decoration:BoxDecoration(
|
|
|
|
color:_controller.index==index
|
|
?Color(0XFFF5CD47)
|
|
:Color(0xFFF5F6F6),
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(27),
|
|
|
|
),
|
|
|
|
child:Tab(
|
|
|
|
child:Center(
|
|
|
|
child:Text(
|
|
|
|
labels[index],
|
|
|
|
style:fontTextStyle(
|
|
|
|
12,
|
|
Color(0XFF3B3B3B),
|
|
FontWeight.w600),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
body:TabBarView(
|
|
|
|
controller:_controller,
|
|
|
|
children:[
|
|
|
|
pendingTab(),
|
|
|
|
connectedTab(),
|
|
|
|
rejectedTab(),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} |